Вот почему это:
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)
. Разве это не нарушает, равномерность равномерной инициализации?
EDIT: я пробовал с clang, и clang принимает его, так что, возможно, это ошибка GCC?