类模板中的类内非静态成员初始化

时间:2016-05-05 20:56:57

标签: c++ templates c++11

此代码:

using namespace std;

struct A
{
    A(string b)
    {
        cout << "A constructed: " << b << endl;
    }
};

template <typename T>
struct B
{
    A a{"Text"};
};

int main()
{
    B<int> b;
}

会抛出此错误: error: no matching function for call to 'A::A(<brace-enclosed initializer list>)',我不明白为什么这段代码无法编译,但更多的消费是当我:

  • 使B常规(非模板)类OR
  • 在初始化列表中初始化成员a(而不是在退出点)或
  • 更改A的构造函数以取const char*而不是string
  • A a{"Test"}更改为A a = "Test"(复制构造函数)
它有效吗?为什么会这样?

使用(g++ 4.8.1编译,std=c++11标记)

0 个答案:

没有答案