繁体   English   中英

在实例化 class 模板时使用内部 class 模板时出现编译器错误

[英]Compiler error when using an inner class template in instantiating a class template

GCC 7.5.0 正在给我一条错误消息,我对此感到困惑。 这是生成消息的最小代码:

template<template<typename> typename>
struct A
{

};

template<char>
struct X
{
    template<typename>
    struct Y
    {

    };
};

template<char c>
struct B : public A<X<c>::Y>
{

};

GCC 7.5.0 说:

../main.cpp:18:28: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<class> class<template-parameter-1-1> > struct A’
subdir.mk:18: recipe for target 'main.o' failed
 struct B : public A<X<c>::Y>
                            ^
../main.cpp:18:28: note:   expected a class template, got ‘X<c>::Y’

问题是否可能是 inheritance 子句中 A 的参数必须是位于命名空间级别的 class 模板? 这不是 X::Y 的情况。 不幸的是,如果不将 Y 放在 X 中,我不知道该怎么做。未显示的特定于应用程序的东西似乎强制它。

您需要告诉编译器X<c>::Y是模板,而不是类型或变量。 尝试以下操作:

template<char c>
struct B : public A<X<c>::template Y>
{

};

演示在这里

对于何时需要指定这种事情以及为什么需要更长时间的讨论, 这个问题非常彻底。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM