Skip to content

败犬日报 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 来访问。