问题描述
|
我有以下片段。
template< typename T >
struct f
{
template< typename V >
struct a : f
{};
};
int main ()
{
f<int>::a<int>::a<double> x;
}
它在GCC 4.4.5和MSVC 2010上没有警告地进行编译,但在GCC 4.5.2上却没有警告-在该警告下,我收到以下错误:
test.cc: In function \'int main()\':
test.cc:11:21: error: expected primary-expression before \'double\'
test.cc:11:21: error: expected \';\' before \'double\'
因此,尽管我没有看到任何非标准的东西,但是这个问题是必须的-在C ++中这合法吗?另外,如果是的话,如何在GCC提交错误报告? (:
编辑:好奇的一点背景:
这应该是模板元编程的一部分。 f
基本上具有模板元函数类的结构,其中apply
替代了a
(当然,省略了apply
的嵌套type
,因此我们可以专注于结构本身)。
在这种情况下,继承是用于绑定元函数返回值的标准设备。此代码段试图实现的是一个元函数类,该类在进行评估时会递归产生。
edit2:让我将相同的代码段稍作不同:
template< typename T >
struct f
{
template< typename V > struct a;
};
template< typename T >
template< typename V >
struct f<T>::a : f<T>
{};
int main ()
{
f<int>::a<int>::a<double> x;
}
这会产生相同的错误。我认为它驳斥了不完整的类型参数。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)