模板化 class 中 `is_base_of` 的静态断言因 MSVC 中的意外类型而失败
Static assertion of `is_base_of` in templated class fails with unexpected type in MSVC
我想确保我的 class 的模板参数之一派生自特定(抽象)class。带着这个意图写了这个
class abstract_record
{};
template<typename Record, typename Container = std::vector> //requires SequenceContainer<Container> //See ISO/IEC PRF TS 19217
class mddb_adapter : public Wt::WAbstractTableModel
{
static_assert(std::is_base_of<abstract_record, Record>,"Record must be derived of MDDB_Service::MDDB_Web::abstract_record");
...
但是我得到一个编译器错误:
error C2226: syntax error : unexpected type 'std::is_base_of<abstract_record,Record>'
这是 MSVC 的问题(我使用的是 Visual Studio 2013 Express)还是我弄错了,例如我该如何解决?
is_base_of
验证的结果可通过静态嵌套 value
数据成员访问:
static_assert(std::is_base_of<abstract_record, Record>::value
// ~~~~~~^
, "Record must be derived of MDDB_Service::MDDB_Web::abstract_record");
如果您的编译器支持转换运算符的 constexpr 评估,您可以改为使用以下语法:
static_assert(std::is_base_of<abstract_record, Record>{}
// ↑↑
, "Record must be derived of MDDB_Service::MDDB_Web::abstract_record");
我想确保我的 class 的模板参数之一派生自特定(抽象)class。带着这个意图写了这个
class abstract_record
{};
template<typename Record, typename Container = std::vector> //requires SequenceContainer<Container> //See ISO/IEC PRF TS 19217
class mddb_adapter : public Wt::WAbstractTableModel
{
static_assert(std::is_base_of<abstract_record, Record>,"Record must be derived of MDDB_Service::MDDB_Web::abstract_record");
...
但是我得到一个编译器错误:
error C2226: syntax error : unexpected type 'std::is_base_of<abstract_record,Record>'
这是 MSVC 的问题(我使用的是 Visual Studio 2013 Express)还是我弄错了,例如我该如何解决?
is_base_of
验证的结果可通过静态嵌套 value
数据成员访问:
static_assert(std::is_base_of<abstract_record, Record>::value
// ~~~~~~^
, "Record must be derived of MDDB_Service::MDDB_Web::abstract_record");
如果您的编译器支持转换运算符的 constexpr 评估,您可以改为使用以下语法:
static_assert(std::is_base_of<abstract_record, Record>{}
// ↑↑
, "Record must be derived of MDDB_Service::MDDB_Web::abstract_record");