Visual Studio 2013(更新2)在编译模板函数时抛出编译时错误,该模板函数的返回类型是嵌套类型名称,已通过多重继承隐藏,并使用using关键字再次显示;如下面的代码所示:
struct Base1 { typedef int value_type; }; struct Base2 { typedef double value_type; }; struct Derived : Base1,Base2 { using Base1::value_type; }; template<typename T> typename T::value_type nullary_function() { return 0; } template<typename T> typename T::value_type unary_function(T t) { return 0; } int main() { nullary_function<Derived>(); // Error: C2770 unary_function( Derived() ); // Error: C2893 return 0; }
G 4.7接受此代码.
具体来说,我想知道C标准在这个问题上有什么说法,以及这是否是VC编译器错误. (在我看来,正如我所知,使用using关键字使嵌套类型可见,使其在所有其他情况下都可见.)
我也知道可以改变带有using关键字的行
using Base1::value_type;
至
typedef Base1::value_type value_type;
为了使代码能够正确编译和运行,但是对于某些(可能)有效的代码在某些编译器而不是其他编译器上进行编译而言,可移植性似乎不好 – 因此需要澄清.
解决方法
原文地址:https://www.jb51.cc/c/118418.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。