我在使用 g++-12 时遇到错误,但在 clang++-13 中不会发生该错误。特别是,这段代码:
\nstruct A {\n constexpr virtual ~A() = default;\n constexpr A() = default;\n};\n\nstruct B : public A {\n constexpr ~B() = default;\n constexpr B() = default;\n};\n\nconstexpr int demo(){\n B *b = new B();\n delete b;\n return 2;\n}\n\nint main(){\n constexpr int demod = demo();\n return demod;\n}\nRun Code Online (Sandbox Code Playgroud)\n使用 clang++ 编译,但使用 g++ 编译会出现错误:
\nstruct A {\n constexpr virtual ~A() = default;\n constexpr A() = default;\n};\n\nstruct B : public A {\n constexpr ~B() = default;\n constexpr B() …Run Code Online (Sandbox Code Playgroud) 我写了一个快速的东西,它确定给定的类型(和参数)是否可以转换为普通的函数指针.它的工作原理如下:
template <typename F, typename...Args>
struct is_stateless : std::is_convertible<F, typename std::result_of<F(Args...)>::type (*) (Args...)>::type
{};
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下运作良好,但它有一个严重的缺点:使用std::result_of<F(Args...)>::type.如果你不小心为你的函数提供了错误的参数(假设你没有离开&),你会因为result_of没有type字段而得到模板错误.我更喜欢我的is_stateless结构,只是在这种情况下,"假"(因为如果你提供的"正确"的函子,并且没有发生可以转换成一个函数指针参数这将是).
我愿意使用GCC4.8.*及更低版本中的C++ 11和c ++ 1y功能.有关如何做到这一点的任何想法?
假设我有这个功能:
int my_thread_id(){
static int counter {0};
thread_local int tid{++counter};
return tid;
}
Run Code Online (Sandbox Code Playgroud)
即使在第一次调用时,此函数 (my_thread_id) 是否异步信号安全?