为什么我不能得到初始化列表提供的自定义概念的编译错误?
Why can't I get compilation error of custom concept supplied with initializer list?
假设我有3个概念:
ostreamable
istreamable
iostreamable
其中定义:
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 拒绝您的代码。
假设我有3个概念:
ostreamable
istreamable
iostreamable
其中定义:
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 拒绝您的代码。