gpt4 book ai didi

c++ - 这应该编译吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:30 24 4
gpt4 key购买 nike

我有以下代码:

#include "type_traits"

template<typename T_>
struct thing{
template<typename me_type>
struct inner {
static T_& impl_0 (void* me ) { return static_cast<me_type*>(me )->operator*(); }

static auto getThing()
{
return std::integral_constant<T_& (*)(void*),&impl_0>();
}
};
};

它在另一个模板类中的模板类中声明了一个静态函数。

然后它声明一个 auto 函数,该函数返回一个指向该函数的指针,但首先它把它放入一个 std::integral_constant

当我将其提供给带有编译器标志 -std=c++14 的 gcc 7.3 版(godbolt)时,它会提示:

<source>: In static member function 'static auto thing<T_>::inner<me_type>::getThing()':
<source>:11:69: error: template argument 2 is invalid
return std::integral_constant<T_& (*)(void*),&impl_0>();

但是当我将它交给 clang 版本 6.0.0 时,它编译得很好 (godbolt)。

是否应该编译?

最佳答案

我认为,它应该按原样编译,因为函数名应该是可见的。但是,这修复了它:

    struct inner { 
static auto getThing()
{
return std::integral_constant<T_& (*)(void*),&inner::impl_0>();
}
};

关于c++ - 这应该编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49242477/

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