小编Bor*_*sin的帖子

C ++函数到指针的隐式转换:哪个编译器正确?铛和海湾合作委员会不同意

template <typename Type, Type Func>
struct A
{
};

void func();

A<void(), func> a; // same result with A<void(), &func> a;
Run Code Online (Sandbox Code Playgroud)

此代码使用Clang(包括最新的8.0.0)进行编译,但不能使用GCC(包括最新的9.1)进行编译。

海湾合作委员会说: error: 'void()' is not a valid type for a template non-type parameter

哪个编译器正确,为什么?

更新资料

我猜GCC是错误的,因为以下代码在Clang和GCC上都可以编译:

template <void()>
struct A
{
};

void func();

A<func> a; // same result with A<&func> a;
Run Code Online (Sandbox Code Playgroud)

因此,与第一个示例中的GCC报告相反,它void()似乎是“模板非类型参数的有效类型”

c++ gcc clang

10
推荐指数
1
解决办法
173
查看次数

标签 统计

c++ ×1

clang ×1

gcc ×1