C-стиль имя структуры причина шаблон класса уже был объявлен как неклассный шаблон с msvc - PullRequest
0 голосов
/ 21 декабря 2018

Код ниже вызывает ошибку компиляции с 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 not 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;
}
...