Xét đoạn mã sau:nếu/ở thời điểm biên dịch?
#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;
}
Đối với x (không const) không có vấn đề. Nhưng y (kiểu dữ liệu const) gây ra lỗi ngay cả khi điều kiện trong if/else được biết tại thời gian biên dịch.
Có khả năng nào để không biên dịch điều kiện giả tại thời gian biên dịch không?
Những gì bạn muốn là một 'if' tĩnh, và nó không phải là một phần của C++ (http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Static-If-I-Had-a-Hammer) – arnoo