Я создал класс, выглядящий примерно так. Ключ в том, что у него есть основной аргумент шаблона плюс базовый класс шаблона со значением по умолчанию. Существует также шаблонный конструктор копирования ...Наследование из шаблона класса с аргументом по умолчанию
struct default_base{};
template <typename T, typename TBase=default_base>
class some_class : public TBase{
public:
some_class(){}
template <typename U, typename UBase>
some_class(const some_class<U,UBase>& u){
T t(U());
}
};
int main(){
some_class<int> a;
return 0;
}
Я получаю это раздражающе смутное ошибку компилятора, так и не смогли обнаружить свою ошибку ... поэтому мой вопрос - что это на самом деле так? Я использую gcc 4.8.1.
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\stuff.o" "..\\src\\stuff.cpp"
..\src\stuff.cpp: In constructor 'some_class<T, TBase>::some_class(const some_class<U, UBase>&)':
..\src\stuff.cpp:87:10: error: default argument for template parameter for class enclosing 'T t(U (*)())'
T t(U());
^
..\src\stuff.cpp: In function 'int main()':
..\src\stuff.cpp:104:16: error: wrong number of template arguments (1, should be 2)
some_class<int> a;
^
..\src\stuff.cpp:82:7: error: provided for 'template<class T, class TBase> class some_class'
class some_class : public TBase{
^
..\src\stuff.cpp:104:19: error: invalid type in declaration before ';' token
some_class<int> a;
Edit: Пятно на ответы, ура :-) Даже если я все еще думаю, что он должен составить ... это компилирует ...
template <typename T>
struct some_other_class{
some_other_class(){}
template <typename U>
some_other_class(){
T t(U());
}
};
Самое неприятное действительно. Сообщение об ошибке действительно ужасно и независимо от самого досадного разбора, оно должно действительно скомпилироваться, не так ли? – Magnus
@Magnus см. Мое редактирование - это похоже на ошибку GCC. Я открыл билет в GCC Bugzilla. –
Cheers, Это довольно неясная комбинация, поэтому я не удивлен ошибкой. – Magnus