请看以下内容:
当将
问题:错误的原因是什么,有没有不引入别名的解决方案?
编辑请注意:代码中声明了A具有模板模板参数,不能更改。
template <class...>
struct MyT;
template <class T>
struct MyT<T> {};
template <template <class> class TT = MyT> struct A {}; // fine
using B = A<MyT>; // does not compile
int main() {
return 0;
}
当将
MyT
用作A
的默认参数时,编译器(g++ 5.4.0)会很高兴。然而,当它用于实例化A
时,情况就不同了:temp.cpp:19:16: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<class> class TT> struct A’
using B = A<MyT>;
^
temp.cpp:19:16: note: expected a template of type ‘template<class> class TT’, got ‘template<class ...> struct MyT’
我可以通过引入别名来解决这个问题:
template <class T>
using MyTT = MyT<T>;
using B = A<MyTT>; // fine
问题:错误的原因是什么,有没有不引入别名的解决方案?
编辑请注意:代码中声明了A具有模板模板参数,不能更改。
struct A
基本上是无意义的;如果你甚至不能使用它,为什么要接受一个模板参数呢? - AndyGMyT
作为默认参数呢? - AlwaysLearning