C样式结构名称原因类类模板已被msvc声明为非类模板

时间:2018-12-21 00:57:23

标签: c++ visual-c++ compiler-errors

下面的代码导致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;
}

0 个答案:

没有答案