在C中,有一个函数本地类型的函数是可以的:
int main() { struct S { static void M(const S& s) { } }; S s; S::M(s); }
但是没有确定的模板可以:
template<typename T> void Foo(const T& t) { } int main() { struct S { } s; Foo(s); // Line 5: error: no matching function for call to 'Foo(main()::S&)' }
14.3.1 paragraph 2 in the c++ standard.
A type with no linkage […] shall not be used as a template-argument for a template type-parameter
为什么C不允许这样做?
到目前为止我听到的最好的解释是内部类型没有链接,这可能意味着将它们作为arg的函数必须没有链接.但是我没有理由看到模板实例化必须具有链接.
附:请不要只说“thats not allowed because the standard says it’s not”
解决方法
原文地址:https://www.jb51.cc/c/111161.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。