C++11中局部类的用法有什么变化吗?
在C++03中,似乎无法将局部类用作模板参数(我记得是这样的)。
考虑以下代码:
template<typename T> void f(const T&) {}
//Note : S is a local class defined inside main()
int main() { struct S{}; f(S()); } //I want template argument to be deduced.
但它给出了编译错误(在C++03模式下),其中提示为 (ideone):
prog.cpp:4: error: no matching function for call to ‘f(main()::S)’
然而,当在C++11模式下编译时(ideone),它可以成功编译,这对我来说是有道理的,否则lambda将无法工作。因此,我猜至少在使用局部类方面有这种改变。我是对的吗?关于局部类还有哪些其他的变化?
请引用标准中相关的文本(C++03和C++11都要),以便读者可以自行比较并供以后参考。