Почему доступ к статическому члену производного типа в CRTP работает с g++, но не с cl.exe?C++

Программы на C++. Форум разработчиков
Anonymous
Почему доступ к статическому члену производного типа в CRTP работает с g++, но не с cl.exe?

Сообщение Anonymous »

Я работаю над проектом C++, в котором использую CRTP для предоставления информации о типах объектов для сериализации. Я добавил статический constexpr TypeID TYPE_ID и установил для него значение Derived::TYPE_ID и начал получать ошибки компилятора о том, что TYPE_ID не является членом моего производного класса TestObject. Я создал минимальную версию этой установки, которая работала нормально, но понял, что компилирую минимальную версию с помощью g++, а полную версию с MSVC. Компиляция минимальной версии с помощью cl.exe снова дала мне ошибки.
Вот мой минимальный код:
base.h

Код: Выделить всё

#ifndef BASE_H
#define BASE_H

#include 

class IBase {
public:
virtual ~IBase() = default;
};

template
class Base : public IBase {
public:
static constexpr std::string_view TYPE_ID = Derived::TYPE_ID;
};

#endif
main.cpp

Код: Выделить всё

#include 

#include "base.h"

class Derived : public Base {
public:
static constexpr std::string_view TYPE_ID = "Derived";
};

int main() {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79337869/why-does-accessing-a-static-member-of-the-derived-type-in-crtp-work-with-g-but[/url]

Вернуться в «C++»