相关疑难解决方法(0)

为什么我不能使用统一初始化初始化初始化列表中的引用?

也就是说,为什么这样:

struct S {};

struct T
{
    T(S& s) : s{s} {}

    S& s;
};

int main()
{
    S s;
    T t{s};
}
Run Code Online (Sandbox Code Playgroud)

给我一个GCC 4.7的编译器错误:

test.cpp: In constructor 'T::T(S&)':
test.cpp:5:18: error: invalid initialization of non-const reference of type 'S&' from an rvalue of type '<brace-enclosed initializer list>'
Run Code Online (Sandbox Code Playgroud)

要修复错误,我必须更改s{s}s(s).这不会打破统一初始化的统一性吗?

编辑:我试过clang,clang接受它,所以也许这是一个GCC错误?

c++ reference initializer-list uniform-initialization c++11

33
推荐指数
3
解决办法
5010
查看次数