8

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 支持论坛上发布了错误报告: 错误报告

4

1 回答 1

4

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

于 2011-03-31T09:23:50.963 回答