【发布时间】:2015-06-30 23:11:28
【问题描述】:
这是我的代码:
template<class T, std::enable_if_t<T::value == 1> * = nullptr>
void foo(T) {
std::cout<<"test"<<std::endl;
} // #1
template<class T, std::enable_if_t<T::value != 1> * = nullptr>
void foo(T) {} // #2
class test{
public:
constexpr static int value = 1;
test() {}
};
int main() {
test p;
foo(p);
}
由于std::enable_if_t<T::value != 1> 要求我的value 是静态的并且constexpr,我假设它是在编译时评估的(我需要确认)。但是由于它是一个模板,它将取决于T,但我的主目录上也有这个,它们不是constexpr:
int main() {
test p;
foo(p);
}
输出:
test
那么此时如何评估事情(包括函数在内的初始化顺序)?因为编译器需要决定创建哪个 foo 版本。
【问题讨论】:
-
好问题。从未尝试过。
标签: c++