LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

вот так компилируется

#include <iostream>
#include <type_traits>

template <class T>
class Data {
public:
    using T_sig = typename std::make_signed_t<T>;
    using T_uns = typename std::make_unsigned_t<T>;

    const T_uns *data_ = nullptr;

    explicit Data(const T_uns *_ptr)
    : data_(_ptr) {
        
    }
};


int main() {

    Data<char> t2((const unsigned char*)"bubulka");
    
    //std::cout << std::is_same< decltype(t1)::T_sig, decltype(t2)::T_sig >::value << std::endl;
    
    return 0;
}

он не может понять что за тип T вообще у него. видимо потому что у конструктора уже тип выведенный из T.

потому что вообще говоря, если тип TT выведен из некого T, вовсе не обязательно есть обратное преобразование, а оно ему надо.

Исправление alysnix, :

вот так компилируется

#include <iostream>
#include <type_traits>

template <class T>
class Data {
public:
    using T_sig = typename std::make_signed_t<T>;
    using T_uns = typename std::make_unsigned_t<T>;

    const T_uns *data_ = nullptr;

    explicit Data(const T_uns *_ptr)
    : data_(_ptr) {
        
    }
};


int main() {

    Data<char> t2((const unsigned char*)"bubulka");
    
    //std::cout << std::is_same< decltype(t1)::T_sig, decltype(t2)::T_sig >::value << std::endl;
    
    return 0;
}

он не может понять что за тип T вообще у него. видимо потому что у конструктора уже тип выведенный из T.

Исходная версия alysnix, :

вот так компилируется

#include <iostream>
#include <type_traits>

template <class T>
class Data {
public:
    using T_sig = typename std::make_signed_t<T>;
    using T_uns = typename std::make_unsigned_t<T>;

    const T_uns *data_ = nullptr;

    explicit Data(const T_uns *_ptr)
    : data_(_ptr) {
        
    }
};


int main() {

    Data<char> t2((const unsigned char*)"bubulka");
    
    //std::cout << std::is_same< decltype(t1)::T_sig, decltype(t2)::T_sig >::value << std::endl;
    
    return 0;
}