gpt4 book ai didi

c++ - 模板类中 `is_base_of` 的静态断言因 MSVC 中的意外类型而失败

转载 作者:搜寻专家 更新时间:2023-10-31 01:00:01 25 4
gpt4 key购买 nike

我想确保我的类的模板参数之一派生自特定(抽象)类。怀着这样的初衷,写了这篇

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");

关于c++ - 模板类中 `is_base_of` 的静态断言因 MSVC 中的意外类型而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32095463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com