gpt4 book ai didi

c++ - ADL 在 constexpr 函数中不起作用(仅限 clang)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:42 25 4
gpt4 key购买 nike

以下代码可以使用 MSVC 和 gcc 编译,但不能使用 clang。为什么会这样?

如果 CallFoo ()constexpr,ADL 似乎无法工作。查看评论。

template <class T>
constexpr void CallFoo () // Remove constexpr to fix clang compilation error.
{
Foo (T ());
}


class Apple {};


int main ()
{
CallFoo<Apple> ();
}


constexpr void Foo (Apple)
{
}

Clang 错误消息(see on godbolt.org):

<source>:4:5: error: use of undeclared identifier 'Foo'
Foo (T ());
^
<source>:13:5: note: in instantiation of function template specialization 'CallFoo<Apple>' requested here
CallFoo<Apple> ();
^

最佳答案

声明应该在实例化时可见,因此 clang 有权拒绝您的代码。重新排序函数修复编译:

constexpr void Foo (Apple)
{
}

int main ()
{
CallFoo<Apple> ();
}

Demo

事实是文件末尾也是一个实例化点,gcc/MSVC 应该只考虑这个:/

关于c++ - ADL 在 constexpr 函数中不起作用(仅限 clang),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501997/

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