以下概念来自《C++20 - 完整指南》(改编自http://wg21.link/p0870),禁止缩小转换范围。例如,float
to int
,如1.9f
→中所示1
。
template <typename From, typename To>
concept ConvertibleWithoutNarrowing = requires (From&& from) {
{ std::type_identity_t<To[]>{std::forward<From>(from)}} -> std::same_as<To[1]>;
};
本书将其用于集合 C,在添加数据时不得进行缩小转换:
template<typename C, typename T>
requires ConvertsWithoutNarrowing<T, typename C::value_type>
void add(C& collection, const T& val) {…}
// Usage:
std::vector<int> vec_i;
add(vec_i, 1); // OK
add(vec_i, 1.3); // Does not compile.
我了解这个概念背后的总体思路,但[1]
最后一部分的std::same_as<To[1]>;
作用是什么?