考慮下面的代碼:if/else在編譯時?
#include <iostream>
#include <type_traits>
template<typename T> class MyClass
{
public:
MyClass() : myVar{0} {;}
void testIf() {
if (isconst) {
myVar;
} else {
myVar = 3;
}
}
void testTernary() {
(isconst) ? (myVar) : (myVar = 3);
}
protected:
static const bool isconst = std::is_const<T>::value;
T myVar;
};
int main()
{
MyClass<double> x;
MyClass<const double> y;
x.testIf();
x.testTernary();
y.testIf(); // <- ERROR
y.testTernary(); // <- ERROR
return 0;
}
當x(非const)是沒有問題的。但是,即使if/else中的條件在編譯時已知,y(const數據類型)也會導致錯誤。
編譯時是否有可能不編譯錯誤條件?
你想要的是一個'靜態if',它不是一部分的c + +(http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Static-If-I-Had-a-Hammer) – arnoo