Если я определяю шаблон struct
Bar
, который принимает аргумент шаблона:
template <template <int,bool,char> class>
struct Bar {};
Я могу создать экземпляр с помощью шаблона struct
, например Zod
:
template <int,bool,char> struct Zod {};
Bar<Zod> a;
Я также могу создать экземпляр с помощью вложенного шаблона struct
, такого как JKL
:
struct GHI {
template <int,bool,char>
struct JKL {};
};
Bar <GHI::JKL> b;
Почему я не могу создать экземпляр Bar
с помощью вложенного вариационного шаблона struct
, такого как DEF
?:
template <typename ...Ts>
struct ABC {
template <Ts ...>
struct DEF {};
};
Bar<ABC<int,bool,char>::DEF> c;
g++ 4.9.2 жалуется на несоответствие типа/значения; в то время как сообщение Clang 3.4.2 сообщает, что аргумент шаблона шаблона имеет разные параметры шаблона, чем его соответствующий шаблонный шаблонный параметр.