相关疑难解决方法(0)

如何使用type_traits检测字符串文字?

我如何可靠地对任何不是字符串文字的东西进行static_assert?

例如,在下面的代码中,我试图包装标准的断言宏,但静态拒绝任何不是字符串文字的消息(因为当断言触发时,除了字符串文字之外的任何东西都不会在运行时显示).

#include <cassert>
#include <string>
#include <type_traits>

#define my_assert(test, message)\
    static_assert(\
        (\
            !std::is_pointer<decltype(message)>::value &&\
            !std::is_array<decltype(message)>::value\
        ),\
        "literal string required"\
    );\
    assert((message, (test)));

int main() {
    my_assert(1 == 1, "one equals one");
    my_assert(1 == 2, "one equals two");

    {
        const char *msg = "one equals one";
        //my_assert(1 == 1, msg); // triggers static_assert
    }

    {
        const char msg[] = "one equals one";
        //my_assert(1 == 1, msg); // triggers static_assert
    }

    {
        const std::string msg = "one equals one";
        //my_assert(1 == …
Run Code Online (Sandbox Code Playgroud)

c++ string-literals type-traits c++11

9
推荐指数
1
解决办法
2013
查看次数

标签 统计

c++ ×1

c++11 ×1

string-literals ×1

type-traits ×1