无需显式转换获取const重载成员函数指针的通用方法
关于C++泛型编程中解析const/非const成员函数指针的问题
背景
我曾查阅过「Resolve const and non-const member function pointer」相关主题,但想知道在C++11及以后标准中,是否存在更适配泛型编程的实现方式。
示例代码
首先定义结构体S:
struct S { int v = 42; int& value() { return v;} int value() const {return v;} };
以及辅助类Holder:
template<typename T> struct Holder { using TYPE = T; };
遇到的问题
当我尝试编写如下泛型lambda代码时:
auto l = [](auto holder) -> decltype(&(std::add_const_t<typename decltype(holder)::TYPE>::value)) { return &(std::add_const_t<typename decltype(holder)::TYPE>::value); };
GCC持续报错:error: 'decltype' cannot resolve address of overloaded function,而Clang直接在编译时崩溃。
不过我通过static_assert已经验证了目标类型是正确的:
static_assert( std::is_same_v< const S, std::add_const_t<Holder<std::decay_t<S>>::TYPE>>, "");
疑问
请问这是正常情况,还是我遇到了语言缺陷或边角案例?
内容的提问来源于stack exchange,提问作者alagner
相关产品推荐
相关产品推荐

