C++ 允许这样的模板化模板参数:
template <template <bool> class T>
struct something1 {};
Bool类型可以用typedef替换(因此不需要原始类型名称出现在声明中):
typedef bool bool_t;
template <template <bool_t> class T>
struct something2 {};
这完美地工作,但如果我尝试定义这样的嵌套结构:
template <typename Type>
struct enclosing
{
typedef bool bool_t;
typedef Type type_t;
template <template <bool_t> class T>
struct something3 {};
template <template <type_t> class T>
struct something4 {};
};
那么下面的代码编译失败:
template <bool Value>
struct param {};
typedef something1<param> x1; // ok
typedef something2<param> x2; // ok
typedef enclosing<bool>::something3<param> x3; // ok
typedef enclosing<bool>::something4<param> x4; // error
这是符合标准的行为,还是我做错了什么?我正在使用 MSVS 2008。
编辑:
我在 Microsoft 支持论坛上发布了错误报告:
错误报告