下面的代码导致msvc(x86 msvc v19.16)编译错误, 但是其他任何编译器都可以接受它,而不会出现错误(gcc,clang和icc)。 您可以在godbolt link处看到错误, 错误是:
[x86 msvc v19.16#1]错误C2989:“ RustStrView”:类模板已被声明为非类模板
关于这行代码template <bool PARAM> inline struct RustStrView Foo<PARAM>::f() {
如果我从struct
中删除struct RustStrView
或将Foo
设为template
类全部编译没有错误。
这是我代码中的错误吗(clang / gcc / icc用-std=c++11 -pedantic
接受了它)
还是这是msvc
错误?
请注意,这是部分生成的代码,教导生成器并不简单
在生成的struct X
内部调用C part
,在X
内部调用C++
。
extern "C" {
struct RustStrView {
unsigned not_important;
};
typedef struct FooOpaque FooOpaque;
struct RustStrView Foo_getName(const FooOpaque *const self);
}
template <bool> class Foo {
public:
struct RustStrView f();
private:
FooOpaque *p_;
};
template <bool PARAM> inline struct RustStrView Foo<PARAM>::f() {
struct RustStrView s = Foo_getName(this->p_);
return s;
}