Рассмотрим этот фрагмент кода:
struct Foo {
};
template<typename T>
struct Bar {
const T foo;
};
int main() {
Bar<Foo> test;
}
Я компилирую его с g++ - 4.9.2 с [-std = С++ 11 -O0 -g3 -pedantic -Wall -Wextra -Wconversion] и получая error: uninitialized const member in ‘struct Bar<Foo>’
. Это довольно очевидно.
НО попробуйте просто добавить std::string в качестве компилятора Foo и программы!
#include <string>
struct Foo {
std::string test;
};
// (...)
Что происходит? Замена типа теста на двойную причину не позволяет скомпилировать программу. Какой член строки изменяется в классе?
Ссылка на онлайн-компилятор с этим фрагментом.
Кажется, что gcc ведет себя так же, как и версия 4.6.