次のコードを検討してください。
#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(非定数)の場合、問題はありません。ただし、y(constデータ型)は、コンパイル時にif / elseの条件がわかっている場合でも、エラーを引き起こします。
コンパイル時にfalse条件をコンパイルしない可能性はありますか?