Im folgenden CodeTypinferenz mit rvalue initializer_list
#include <initializer_list>
#include <utility>
template<typename T> void f(T&& x) {}
template<typename T> void g(std::initializer_list<T> x) {}
int main()
{
auto x = {0}; // OK
auto&& y = {0}; // OK
g(x); // OK
g(std::move(x)); // OK
g({0}); // OK
f(x); // OK
f(std::move(x)); // OK
f({0}); // failure
return 0;
}
rvalue initializer_list
mit auto
aber nicht mit template
abgeleitet werden.
Warum verbietet C++ das?
Wahrscheinlich, weil '{0}' wird als eine Art "wörtlichen initializer" behandelt und intuitiv können Sie‘ t Bewegen Sie sich von einem Literal (oder haben Sie eine Referenz auf einen Wert, aus dem Sie sich bewegen könnten). –
Sie vermissen '#include', nebenbei bemerkt. –
chris
@chris - du hast Recht. Ich werde bearbeiten –