【发布时间】:2019-03-19 13:27:34
【问题描述】:
我需要访问static constexpr,而我整合的一个解决方案适用于 gcc (live example),但不适用于 vc++ (live example)。
代码如下:
template<class Drvd>
class Base
{
public:
static constexpr bool val = Drvd::val;
};
class Derived : public Base<Derived>
{
friend class Base;
private:
static constexpr bool val = true;
};
int main()
{
std::cout << Derived::Base::val << std::endl;
}
所以这是 vc++ 的一个错误,但任何人都知道如何以 vc++ 不会抱怨的不同方式实现 Base 中定义的 val 作为 Drvd 中 val 的值?
编辑:
请注意,结果与变体相同:friend class Base<Derived>; 而不是 friend class Base;
【问题讨论】:
标签: c++ visual-c++ metaprogramming crtp static-polymorphism