为什么我不能得到初始化列表提供的自定义概念的编译错误?

Why can't I get compilation error of custom concept supplied with initializer list?

假设我有3个概念:

其中定义:

template <typename T>
concept ostreamable = requires (std::ostream& os, T arg) {
    {os << arg} -> std::convertible_to<std::ostream&>;
};
template <typename T>
concept istreamable = requires (std::istream& is, T& arg) {
    {is >> arg} -> std::convertible_to<std::istream&>;
};
template <typename T>
concept iostreamable = ostreamable<T> && istreamable<T>;

申请:

iostreamable auto var1 = {4, 5, 10, 10}; // no error, but unexpected.
iostreamable auto var2 = 3.232; // no error, expected
iostreamable auto var3 = std::bitset<4>{0b1001}; // no error, expected
iostreamable auto var4 = std::vector{4, 10, 3, 10}; // compilation error, expected

当我根据所述概念 iostreamable 的要求使用 var1 时,例如应用 operator<<operator>>,我预计会得到详细的编译错误。

这似乎是一个 GCC 错误。

Clang 和 MSVC 拒绝您的代码。