initializer_list निम्नलिखित कोडrvalue साथ प्रकार निष्कर्ष
#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
auto
लेकिन template
साथ नहीं के साथ निष्कर्ष निकाला जा सकता है।
क्यों सी ++ इसे मना करता है?
शायद क्योंकि '{0}' "शाब्दिक प्रारंभकर्ता" का एक प्रकार के रूप में व्यवहार किया जाता है और intuitively आप कर सकते हैं ' एक शाब्दिक से स्थानांतरित नहीं होता है (या उसमें से एक रैल्यू संदर्भ है जिसे आप स्थानांतरित कर सकते हैं)। –
आप रास्ते में '# शामिल करें' खो रहे हैं। –
chris
@ क्रिसिस - आप सही हैं। मैं –