以下代码说明了我遇到的一个问题,它无法使用对 Def::DEFAULT 的未定义引用进行编译;
但是,如果我注释掉 main 中的第二行,它将编译并运行良好,我可以通过强制转换为 int 或直接分配给 Val 类 int 数据成员来“查看”分配给 DEFAULT 的值。
template <typename T, T def>
class Def {
public:
static const T DEFAULT = def;
enum {DEFAULT_ENUM = DEFAULT};
};
class Val {
public:
Val& operator=(const int &val_in) {
val = val_in;
return *this;
}
int val;
};
typedef Def<int, 10> Def_t;
Val test_val;
int main()
{
test_val = Def_t::DEFAULT_ENUM; // works
test_val = Def_t::DEFAULT; // fails to compile
test_val = (int) Def_t::DEFAULT; // works
test_val.val = Def_t::DEFAULT; // works
}