gpt4 book ai didi

c++ - GCC 但不是 Clang 更改函数类型的引用限定符以指向限定成员函数的指针

转载 作者:行者123 更新时间:2023-12-05 05:39:43 24 4
gpt4 key购买 nike

以下代码片段可以在 Clang 中编译,但不能在 GCC 12 中编译。

// function type (c style)
//typedef int fun_type() const&;
// C++ style
using fun_type = int() const&;

struct S {
fun_type fun;
};

int S::fun() const& {
return 0;
}

int main()
{
fun_type S::* f = &S::fun;
}

在 GCC 中产生错误:

prog.cc: In function 'int main()':
prog.cc:21:25: error: cannot convert 'int (S::*)() const &' to 'int (S::*)() const' in initialization
21 | fun_type S::* f = &S::fun;
| ^~~~~~~

S 的声明应该等同于下面的声明

struct S {
int fun() const&;
};

使用此声明不会改变任一编译器的行为。这是编译器翻译模块中与未充分使用的语言功能相关的错误吗?哪个编译器在标准方面是正确的?

最佳答案

Which compiler is correct standard-wise?

Clang 接受程序是正确的。该程序格式良好,因为 fun_type S::* f 等同于编写:

int (S::*f)() const &

可由initializer&S::fun初始化。

关于c++ - GCC 但不是 Clang 更改函数类型的引用限定符以指向限定成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72612728/

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