Информация об изменениях

Сообщение Re[2]: Вопрос про конструкторы от 08.08.2019 8:52

Изменено 08.08.2019 9:21 Videoman

Re[2]: Вопрос про конструкторы
Даже вот такое чудо работает, но очень нужно мнение, насколько это правильно ???:
#include <string>
#include <vector>
#include <iostream>

template <typename Type>
    struct Stub
    {
        Stub(Type type) : type(type) {}

        operator const Type&() const { return type; };

        Type type;
    };

    struct A
    {
        operator const size_t& () const { return Stub<size_t>({}); }
        operator const std::vector<std::string>& () const { return Stub<std::vector<std::string>>({}); }
    };

    struct B
    {
        B(const A& a) : v(a) {}

        std::vector<std::string> v;
    };

int main()
{
    // Где-то ниже
    A a;
    std::vector<std::string> v1 = a; // (1)
    std::vector<std::string> v2(a);  // (2)
    v1 = a;                          // (3)
    
    B b(a);
    
}
Re[2]: Вопрос про конструкторы
Даже вот такое чудо работает, но очень нужно мнение, насколько это правильно ???:
#include <string>
#include <vector>
#include <iostream>

template <typename Type>
    struct Stub
    {
        Stub(Type type) : type(type) {}

        operator const Type&() const { return type; };

        Type type;
    };

    struct A
    {
        operator const size_t& () const { return Stub<size_t>({}); }
        operator const std::vector<std::string>& () const { return Stub<std::vector<std::string>>({}); }
    };

    struct B
    {
        B(const A& a) : v(a) {}

        std::vector<std::string> v;
    };

int main()
{
    // Где-то ниже
    A a;
    std::vector<std::string> v1 = a; // (1)
    std::vector<std::string> v2(a);  // (2)
    v1 = a;                          // (3)
    
    B b(a);
    
}


P.S. Глянул ассемблерный листинг внимательно. Вроде не работает как нужно. Деструктор Stub вызывается перед выходом, до return .