我很抱歉,但我不明白爲什麼以下將無法正常工作(GCC 4.8.1):以一流的使用=類模板initialisers
#include <string>
using namespace std;
template <typename T> struct A{
//A(): s("why") { } //fine
//string s{"what"}; //also fine
//A() = default; //(same error as below)
string s = "why?!"; //error: conversion from 'const char [6]' to non-scalar type 'std::string {aka std::basic_string<char>}' requested|
};
struct B{
string s = "why?!"; //all good
};
int main(){
A<int> a;
B b;
}
出於某種原因,通過引入一個模板,我不能使用=
作爲字符串s
的類內初始化程序。內置類型的工作,事實上,我可以通過在默認構造函數中使用大括號或顯式初始化來規避它。爲什麼它會使用=
大驚小怪?
這可能是一個錯誤。它編譯[gcc 4.9.2](http://goo.gl/Ht3lbI) – NathanOliver
我也重現了這一點(gcc 4.8上的問題),它在gcc 4.9.2上很好。 gcc 4.8有很好的C++ 11支持,但是有一些已知的bug,這可能就是其中之一。我認爲你應該簡單地升級編譯器。 –
MSVC2013編譯。 – marom