我想确保我的类的一个模板参数是从特定(抽象)类派生的。有了这个意图就写了这个
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)还是我遇到了问题,例如我该如何解决这个问题?
答案 0 :(得分:4)
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");