gpt4 book ai didi

c++ - 海湾合作委员会 : Unscoped enumeration type give an ambiguity error

转载 作者:可可西里 更新时间:2023-11-01 16:34:08 29 4
gpt4 key购买 nike

在下面的代码中,我定义了一个 unscoped enumeration long long 类型。该程序在 Clang 上运行良好。

但是 GCC 编译器给出了一个歧义错误。

#include <iostream>

enum : long long { Var=5 };

void fun(long long ll)
{
std::cout << "long long : " << ll << std::endl;
}

void fun(int i)
{
std::cout << "int : " << i << std::endl;
}

int main()
{
fun(Var);
}

GCC 产生的错误:

main.cpp: In function 'int main()':
main.cpp:17:12: error: call of overloaded 'fun(<unnamed enum>)' is ambiguous
fun(Var);
^
main.cpp:5:6: note: candidate: void fun(long long int)
void fun(long long ll)
^~~
main.cpp:10:6: note: candidate: void fun(int)
void fun(int i)
^~~

为什么 GCC 编译器会给出歧义错误?

最佳答案

GCC 是错误的。

转换为其基础类型的无作用域枚举类型被限定为 integral promotion :

an unscoped enumeration type whose underlying type is fixed can be converted to its underlying type, ... (since C++11)

Var 转换为 int 时,它还需要一个 integral conversion (从 long longint)。 积分推广overload resolution中的排名高于积分转化 :

2) Promotion: integral promotion, floating-point promotion

3) Conversion: integral conversion, floating-point conversion, floating-integral conversion, pointer conversion, pointer-to-member conversion, boolean conversion, user-defined conversion of a derived class to its base

那么 fun(long long ll) 应该更匹配。


Here是 gcc 错误报告;它已在 2017-10-24 修复。 LIVE

关于c++ - 海湾合作委员会 : Unscoped enumeration type give an ambiguity error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685191/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com