Запитання з тегом «typetraits»

5
Як працює `is_base_of`?
Як працює наступний код? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) …

1
Чому std :: is_pod застарілий у C ++ 20?
std::is_podймовірно буде застарілою в C ++ 20. У чому причина такого вибору? Що я повинен використовувати замість того, std::is_podщоб знати, чи тип насправді є POD?
92 c++  typetraits 

3
тривіальний проти стандартного макета проти POD
Якщо говорити неспеціалістами, у чому різниця між тривіальними типами, типовими типами компонування та POD? Зокрема, я хочу визначити, чи new Tвідрізняється він від new T()будь-якого параметра шаблону T. Який із типів рис is_trivial, is_standard_layoutі чи is_podварто обирати? (Як побічне питання, чи можна будь-яку з цих властивостей типу реалізувати без магії …


1
std :: is_constructible повертає непослідовне значення для приватного конструктора
Які правила std::is_constructibleкеруються приватними конструкторами? Дано наступний код: #include <iostream> class Class { private: Class() { } }; template <typename T> class Test { public: static void test() { std::cout //<< std::is_constructible<Class>::value << std::is_constructible<T>::value << std::endl; } }; int main() { Test<Class>::test(); } Цей відбиток 0( ideone ), тобто Tне …
13 c++  typetraits 

1
Чому static_cast потрібен при впровадженні gcc в програмі is_nothrow_constructible?
type_traitsЧому випливає з реалізації GCC, навіщо це static_castпотрібно тут? template <typename _Tp, typename... _Args> struct __is_nt_constructible_impl : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))> {}; template <typename _Tp, typename _Arg> struct __is_nt_constructible_impl<_Tp, _Arg> : public integral_constant<bool, // Why is `static_cast` needed here? noexcept(static_cast<_Tp>(declval<_Arg>()))> {};

3
Чому в наступному випадку не потрібно використовувати назви типу для залежних типів?
Я читав про видалення посилання на тип тут . Він наводить такий приклад: #include <iostream> // std::cout #include <type_traits> // std::is_same template<class T1, class T2> void print_is_same() { std::cout << std::is_same<T1, T2>() << '\n'; } int main() { std::cout << std::boolalpha; print_is_same<int, int>(); print_is_same<int, int &>(); print_is_same<int, int &&>(); print_is_same<int, …
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.