Почему доступ к статическому члену производного типа в 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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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