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