如果要开一个变量,其类型是模板参数,那么
* 要么,正确处理模板参数带 const 或带引用的情况(尤其是参数带着 && 的时候,一不小心就 const 或者 & 或者 && 了)
* 要么,先 decay 再存,也就是从存 T 变成存 decay_t<T>(看具体功能)
* 实在不行,static_assert 掉不愿意处理的情况(
要是忘了处理引用的情况,当场可能没锅,后续维护忘了这事,CE 事小, 涉及到生命周期的 UB 事大啊(
* 要么,正确处理模板参数带 const 或带引用的情况(尤其是参数带着 && 的时候,一不小心就 const 或者 & 或者 && 了)
* 要么,先 decay 再存,也就是从存 T 变成存 decay_t<T>(看具体功能)
* 实在不行,static_assert 掉不愿意处理的情况(
要是忘了处理引用的情况,当场可能没锅,后续维护忘了这事,CE 事小, 涉及到生命周期的 UB 事大啊(
考虑这个场景:
能否在
{
T t;
do_something(t);
}能否在
do_something(T&&) 是 well-formed 的情况下自动优化成 do_something(move(t)); ??Forwarded from saffahyjp | 扩散语言模型
[](...){[](){[](){}();}();}([]{[]{}();},[](){});在构造函数里面构造成员的时候如果用到了 lambda,除了 [&] 以外一定要注意有没有需要 = 的!!!for 循环里面有 lambda,要检查循环变量要不要 = capture!!!
草,
template <SomeConcept<T> U> 等价于 template <typename U> requires SomeConcept<U, T> ,而不是 template <typename U> requires SomeConcept<T, U> ,一直记反了
C++ 虐我千百遍
转自 std-proposals
判断 T(args...) 是不是 constexpr,也就是判断 T 是否能以 args... 来 constexpr-constructible