cst*_*fel 10 c++ gcc clang visual-studio
最近在我的公司遇到了一个错误,我无法理解为什么它实际上是一个错误.对我们来说,似乎这应该编译得很好,并允许我们显式实例化bar :: foo类型的模板.
mainy.cxx
int foo(int);
namespace bar {
template <typename T> T foo(T a, T){return a;}
}
namespace bar {
using ::foo;
}
template int bar::foo(int, int);
int main(){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g ++错误
[csteifel@host:~/test]1047 $ g++ mainy.cxx
mainy.cxx:10: error: 'int bar::foo(int, int)' should have been declared inside 'bar'
mainy.cxx:10: error: 'int bar::foo(int, int)' is not declared in '::'
Run Code Online (Sandbox Code Playgroud)
我们已经确认这是gcc 4.8,4.4和clang 3.7中的错误,但它似乎适用于Visual Studio 2015.
当我们尝试实例化时遇到了这个问题,std::remove但<algorithm>之前已经包含<cstdio>并且<cstdio>已经包含在内
namespace std {
using ::remove;
}
Run Code Online (Sandbox Code Playgroud)
关于最新情况的任何想法?
看起来这与gcc 中的一个古老错误有关,您无法通过 using 显式实例化模板ns::func,唯一的方法是使用namespace ns { ... func; }. 这个问题最近才被修复,并且使用较新的 gcc 您的代码将可以编译。
顺便说一句,与您所说的相反,您的代码使用 clang 3.7 进行编译。
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |