败犬日报 2024-10-23
1. 为什么 std::same_as 定义为 std::is_same_v T U && std::is_same_v U T,明明 is_same 有交换性
https://en.cppreference.com/w/cpp/concepts/same_as Possible implementation:
cpp
namespace detail
{
template< class T, class U >
concept SameHelper = std::is_same_v<T, U>;
}
template< class T, class U >
concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>;
same_as 这样拆成 2 个子 concept 是为了让“约束的偏序”生效,就是判哪个约束更严格那个。
std::is_same_v<T, U>
std::is_same_v<U, T>
是不同的约束。
2. 系统调用 brk, sbrk 线程安全吗
不是。
3. const map 用 operator[] 居然能编译过去
发现是开了编译选项 -fpermissive
。默认不开(GCC)。
const map 要用成员函数 at 来访问。