Das folgende Konzept aus C++20 – The Complete Guide (angepasst von
http://wg21.link/p0870) verbietet einschränkende Konvertierungen. Z. B. float zu int, wie in 1.9f → 1.
Code: Select all
template
concept ConvertibleWithoutNarrowing = requires (From&& from) {
{ std::type_identity_t{std::forward(from)}} -> std::same_as;
};
Das Buch verwendet dies für eine Sammlung C, die beim Hinzufügen von Daten keine einschränkenden Konvertierungen aufweisen darf:
Code: Select all
template
requires ConvertsWithoutNarrowing
void add(C& collection, const T& val) {…}
// Usage:
std::vector vec_i;
add(vec_i, 1); // OK
add(vec_i, 1.3); // Does not compile.
Ich verstehe die allgemeine Idee hinter dem Konzept, aber was bedeutet das [1] im letzten Teil, std::same_as;, tun?