История изменений
Исправление 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;
}