当前位置: 首页 > 知识库问答 >
问题:

处理constexpr函数中的致命错误(或断言)

拓拔泓
2023-03-14
    template <class T>
    constexpr inline size_t GetObjectSize(const T & val)
    {
        if constexpr (std::is_arithmetic<T>::value)
        {
            return sizeof(val);
        }

        if constexpr (std::is_class<T>)
        {
            return 5u;
        }

        //there should be compile time error.
    }

    int * p;
    //compile time error
    GetObjectSize(p);

2)它是实现定义的,不保证是costexpr。

3)static_assert(false)总是与T无关地失败。

共有1个答案

冉锋
2023-03-14

static_assert(false)总是与T无关地失败。

然后使其依赖于t

template<typename>
struct always_false { enum {value = 0}; };

// ...

if constexpr(...) {
}
else {
    static_assert(always_false<T>::value, "Some useful description");
}

是的,这是一个魔术师的把戏。但法律的枯燥文字是可以接受的。遗憾的是,在If constexpr的依赖分支中打印有用的诊断信息的方法并不是更好。

 类似资料:
  • 问题内容: 根据对此答案的评论,有可能通过关机功能来捕获致命错误,而使用不能捕获该错误。 但是,我无法确定如何确定是由于致命错误还是由于脚本到达末尾而导致关机。 另外,调试回溯函数似乎在关闭函数中已失效,因此对于记录发生致命错误的堆栈跟踪而言,它毫无价值。 所以我的问题是:对致命错误(尤其是未定义的函数调用)做出反应的同时保持创建适当回溯能力的最佳方法是什么? 问题答案: 这对我有用: 但是,您可

  • 我正在实现一个定制的Kotlin CoroutineScope,它处理通过WebSocket连接接收、处理和响应消息。作用域的生命周期与WebSocket会话相关联,因此只要WebSocket处于打开状态,它就处于活动状态。作为协同程序作用域上下文的一部分,我安装了一个自定义异常处理程序,如果出现未处理的错误,它将关闭WebSocket会话。是这样的: 我惊讶地发现异常处理程序不仅接收异常,而且实

  • 本文向大家介绍PHP错误处理函数,包括了PHP错误处理函数的使用技巧和注意事项,需要的朋友参考一下 在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。 PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重要的部分。如果您的代码缺少错误检测编码,那么程序看上去很不专业,也为安全风险敞开了大门。 本教程介绍了 PHP 中一些

  • 我正在尝试编译以下C代码(另存为example4.cpp) 此代码给出以下错误: example4.cpp:在函数'Conconexpr double nth(double, int)':example4.cpp:24: 9: error:调用非Conconexpr函数'std::basic_ostream 谁能推荐一下吗? 谢谢你。

  • 问题内容: 如何使用 自定义* 错误处理程序处理 解析 和 致命 错误? * 问题答案: 简单答案:不能。参见手册: 用户定义的函数无法处理以下错误类型:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,以及在调用set_error_handler()的文件中引发的大多数E_STRICT。 对

  • 试图创建一个登录屏幕,我得到一个错误 致命错误:在第19行的C:\xampp\htdocs\login\class\Mysql.php中,对非对象调用成员函数准备() Constants.php

  • 我刚刚切换了我的网站的主机,它给我打开wordpress管理面板页面的错误。有人能帮我吗?谢啦 致命错误:未捕获错误:调用未定义函数eregi()在 /home/atifchat/public_html/pakistanivoicechat.com/wp-content/plugins/google-bot-bling/google-bot-bling.php: 59堆栈跟踪:#0 /home/a

  • 问题内容: 我正在尝试建立一个捐赠中心,使用的是Totorialzine的源代码。 到目前为止,到目前为止一切都对我来说还算不错,但是我一直在苦苦挣扎并试图研究一整天的唯一问题,无法确切知道代码的实际错误所在 这是我的访客捐赠时在页面上提交评论时得到的。 这是php文件中的代码。 我的phpMyAdmin数据库已完成上传 这是我按照安装说明进行操作的地方 http://tutorialzine.c