Re[10]: std::variant для вложенного класса
От: sergii.p  
Дата: 05.12.25 16:03
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, rg45, Вы писали:


R>>Ну вот, а мне тут про какие-то контексты лапшу на уши навешивают


BFE>
BFE>using value_type = float;

BFE>struct A
BFE>{
BFE>  struct B
BFE>  {
BFE>     value_type n = 0;
BFE>  };
BFE>  using value_type = int;
BFE>};
BFE>


только немного не так. Здесь value_type будет как раз float.

using value_t = float;

struct Outer {
    struct Inner {
        value_t i;
    };
    std::variant<Inner> v; // value_t = float, Inner - считается полным, конструктор создать можно, код компилируется
    using value_t = long long; // это переопределение уже никого не волнует, тип Inner готов
};


а вот как раз с дефолтной инициализацией компилятор не знает откуда взять определение

static constexpr int SuperDuperConst = 0;

struct Outer {
    struct Inner {
        int i = SuperDuperConst;
    };
    std::variant<Inner> v; // i должна быть равна 42, но мы ещё не добрались до определения SuperDuperConst и конструктор сгенерировать не можем - компиляция провалилась
    static constexpr int SuperDuperConst = 42;
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.