当前位置: 首页 > 知识库问答 >
问题:

嵌套类显式规范化:不同的编译器行为

欧阳智志
2023-03-14

下面的代码可以用clang 6.0.0和g 7.3.0很好地编译(编译标志是-std=c 14-Wall-Wexter-Werror-peenty-error),但是不能用vc19.10.25017编译(编译标志是/Za):

template <typename>
struct A
{
    template <typename>
    struct B
    {
    };
};

template <>
template <>
struct A<int>::B<char>
{
    static void foo();
};

void A<int>::B<char>::foo()
{
}

int main()
{
}

vc编译错误消息:

错误C2906:“作废A

在这种情况下,什么行为符合标准?

共有1个答案

葛奇
2023-03-14

VC是错误的。可能误解了以下条款:

显式专用类模板的成员的定义方式与普通类的成员相同,并且不使用模板

后一条规则的目的是消除歧义:

// Which template does this header appertain to?
template<class U> void A<short>::C<U>::f() { /* ... */ } 

然而,在您的情况下,(*)情况适用。

 类似资料:
  • 我正在尝试使用 JOLT 转换 JSON。此 JSON 由嵌套数组组成,我无法获得正确的转换。 这是原始的JSON。请注意,总会有一个带有单个对象的“结果”数组。此对象将始终包含一个“行”数组。我想要行数组中每个元素的字段。 这是我写的规范: 预期的 JSON 是: 然而,我的规范返回以下输出: 水平可能有问题。但是我想不出来。有人能帮忙吗?

  • 我正在尝试使用JOLT转换JSON。这个JSON由嵌套数组组成,我不能正确地转换它。有人能帮忙吗?谢了。 这是我写的规范。 我期待的JSON是: 然而,我得到了错误的输出。不知怎的,我的嵌套对象正在转换为列表。 我不知道出了什么问题。有人能帮忙吗?

  • 问题内容: 游乐场执行失败:MyPlayground.playground:109:22:错误:无效使用’()’调用非函数类型’[ClassA.ClassB.Type]’的值时,让didNotCompile = ClassA.ClassB ^ ~~ 问题答案: 如您所述,它可以使用以下语法: 但是,如果我们声明一个: 因此,我想说这是一个错误,也应该无需输入别名即可工作。 更新 :Apple 已经

  • 请考虑以下示例: 如果我理解正确的话,根据https://en.cppreference.com/w/cpp/language/zero_initialization,它不能抛出,因为应该对B::A执行零初始化,就像对“没有构造函数的值初始化类类型的成员”一样。 如果它抛出,是编译器错误还是我遗漏了什么? 编辑:我在英特尔网站上提交了一个bug:https://community.intel.co

  • 你能帮我解决我的代码中的这个问题吗,因为使用pandas (groupby()、agg())的空间连接给了我下面的错误: 我有一个数据框 df,我使用它中的几列来分组:n 以下方式我几乎得到了我需要的表(数据框)。缺少的是包含每个组中的行数的附加列。换句话说,我有平均值,但我也想知道有多少数字被用来获得这些手段。 简而言之:如何获取数据帧的分组统计信息? 法典: 错误:

  • 问题内容: 我正在编译glibc库。在我可以这样做之前,我需要先跑步。但是,要编译glibc,我需要使用gcc编译器,它不是计算机上的默认编译器。该手册说明以下内容。 现在,我的问题是我对该计算机没有任何管理权限。因此,如何使用不同于默认值的编译器。 问题答案: 在linux上,任何人都可以更改其进程的环境变量。不需要管理权限。 在bash中: 在csh中使用 在该命令之后在此shell中启动的任