【发布时间】:2016-12-31 19:02:52
【问题描述】:
考虑以下代码:
#include <type_traits>
struct A {
template<typename T, std::enable_if_t<sizeof(T)<=sizeof(int), int> = 0>
static void fun() {}
template<typename T, std::enable_if_t<(sizeof(T)>sizeof(int)), int> = 0>
static void fun() {}
void test() {
using fun_t = void(*)();
fun_t ff[] = {
fun<int>,
&fun<int>,
A::fun<int>,
&A::fun<int>,
this->fun<int>,
&this->fun<int>, //error C2276: '&': illegal operation on bound member function expression
};
}
};
msvc 2015update3 和 2017rc 生成错误 C2276,这没有任何意义。 gcc、clang 和 intel 编译器都可以。
解决方法很简单:使用上面所有应该等价的任何其他表达式。
但是,错误消息的措辞令人不安,人们不得不怀疑,对于任何其他替代方案,绑定的成员函数表达式是否不正确。
对这个问题有什么见解吗?
【问题讨论】:
标签: c++ visual-c++ visual-studio-2015 compiler-bug