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支持论坛上发布了一个错误报告:
Bug Report
答案 0 :(得分:4)
这似乎是VC ++中的一个错误;我验证了VC ++ 2010 SP1中的行为没有改变。我建议在MS Connect上发布错误报告,然后在此处发布链接,以便我们进行投票。