小编Mat*_*ano的帖子

constexpr C++ 错误:在定义之前使用了析构函数

我在使用 g++-12 时遇到错误,但在 clang++-13 中不会发生该错误。特别是,这段代码:

\n
struct 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}\n
Run Code Online (Sandbox Code Playgroud)\n

使用 clang++ 编译,但使用 g++ 编译会出现错误:

\n
struct 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)

c++ constexpr c++20

19
推荐指数
2
解决办法
1016
查看次数

通过功能获得SFINAE正确

我写了一个快速的东西,它确定给定的类型(和参数)是否可以转换为普通的函数指针.它的工作原理如下:

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功能.有关如何做到这一点的任何想法?

c++ templates sfinae c++11

5
推荐指数
1
解决办法
268
查看次数

C++14 中的 static thread_local 内存异步信号安全吗?

假设我有这个功能:

int my_thread_id(){
  static int counter {0};
  thread_local int tid{++counter};
  return tid;
}
Run Code Online (Sandbox Code Playgroud)

即使在第一次调用时,此函数 (my_thread_id) 是否异步信号安全?

c++ signals c++11 c++14

3
推荐指数
1
解决办法
1066
查看次数

标签 统计

c++ ×3

c++11 ×2

c++14 ×1

c++20 ×1

constexpr ×1

sfinae ×1

signals ×1

templates ×1