带模板类型的模板化模板参数列表

时间:2011-03-31 09:11:05

标签: c++ templates metaprogramming template-meta-programming

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

1 个答案:

答案 0 :(得分:4)

这似乎是VC ++中的一个错误;我验证了VC ++ 2010 SP1中的行为没有改变。我建议在MS Connect上发布错误报告,然后在此处发布链接,以便我们进行投票。