也就是说,为什么会这样:
struct S {};
struct T
{
T(S& s) : s{s} {}
S& s;
};
int main()
{
S s;
T t{s};
}
给我一个 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>'
?
要修复错误,我必须s{s}
将s(s)
. 这不会破坏统一初始化的统一性吗?
编辑:我尝试了 clang,并且 clang 接受了它,所以也许这是一个 GCC 错误?