Я использую GCC 4.4.5.
Вот воспроизведение моей проблемы:
#include <vector>
class Test
{
public:
Test( int a, int b = 42 ) : m_a( a ), m_b( b ) {}
private:
int m_a;
int m_b;
};
typedef std::vector<Test> TestList;
class TestMaster
{
public:
TestMaster( TestList tests = TestList() ) : m_tests( tests ) {}
private:
TestList m_tests;
};
Теперь это работает:
int main()
{
TestList test_list = { 15, 22, 38 };
return 0;
}
Но это не компилируется:
class TestManager : public TestMaster
{
public:
TestManager()
: TestMaster( { { 42, 54, 94 } } ) //?
{}
};
int main()
{
TestManager test_manager;
return 0;
}
Или, может быть, я просто не использую правильный синтаксис? Или GCC не так?
Ошибка:
g++ -std=c++0x hello_world.cpp
hello_world.cpp: In constructor \u2018TestManager::TestManager()\u2019:
hello_world.cpp:38: erreur: no matching function for call to \u2018TestMaster::TestMaster(<brace-enclosed initializer list>)\u2019
hello_world.cpp:24: note: candidats sont: TestMaster::TestMaster(TestList)
hello_world.cpp:21: note: TestMaster::TestMaster(const TestMaster&)
Я также попробовал более простой способ сделать то же самое (без наследования):
TestMaster test_master = { { 42, 54, 94 } };
С той же ошибкой.
Есть идеи? Я не понимаю, почему семантика не сработает здесь ...