Size: a a a

2020 July 19

AC

Andrei Cherniuk in supapro.cxx
Artöm Bakri Al-Sarmini
1. sizeof(int) может быть 1
2. operator< может быть свободной функцией
3. вспомогательные функции лучше убрать в приват
4. переменная в трейте по общему соглашению называется value
спасибо, код поправил
заодно и ошибку нашёл
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Denis Paukaev
Это раз ок, но ты написал не это
Так размер инта 1 байт
источник

AC

Andrei Cherniuk in supapro.cxx
Владимир
А лучше попробуйте так:
template<typename T1, typename T2>
struct has_operator_less {
   template<typename T>
   struct equal{};
   template<typename F1, typename F2>
   static std::true_type f(equal<decltype (std::declval<F1>()<std::declval<F2>())>*);
   template<typename F1, typename F2>
   static std::false_type f(...);
};
спасибо
источник

DP

Denis Paukaev in supapro.cxx
Artöm Bakri Al-Sarmini
Так размер инта 1 байт
А ну если мы про интересные архитектуры с кол-вом бит не 8, то да )
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
О них и речь. В восьмибитных инт минимум 2 байта
источник

DP

Denis Paukaev in supapro.cxx
Но на х86/х64 такого быть не может, я скорее это имел ввиду
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Таргета в вопросе не видел, так что написал с позиции языка
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
@cherniuk в старом коде для этого используют (char&)[1] и (char&)[2], если интересно
источник

AC

Andrei Cherniuk in supapro.cxx
Artöm Bakri Al-Sarmini
1. sizeof(int) может быть 1
2. operator< может быть свободной функцией
3. вспомогательные функции лучше убрать в приват
4. переменная в трейте по общему соглашению называется value
да, видел на cppreference это
теперь понимаю, что для п.1
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Владимир
А лучше попробуйте так:
template<typename T1, typename T2>
struct has_operator_less {
   template<typename T>
   struct equal{};
   template<typename F1, typename F2>
   static std::true_type f(equal<decltype (std::declval<F1>()<std::declval<F2>())>*);
   template<typename F1, typename F2>
   static std::false_type f(...);
};
template <typename T, typename = void>
inline constexpr has_less_v = false;

template <typename T>
inline constexpr has_less_v<T, std::void_t<decltype(std::declval<T>() < std::declval<T>())>> = true;
источник

В

Владимир in supapro.cxx
Artöm Bakri Al-Sarmini
template <typename T, typename = void>
inline constexpr has_less_v = false;

template <typename T>
inline constexpr has_less_v<T, std::void_t<decltype(std::declval<T>() < std::declval<T>())>> = true;
template <typename T, typename = void>
struct has_less_v : std::false_type {};

template <typename T>
struct has_less_v<T, std::void_t<decltype(std::declval<T>() < std::declval<T>())>> : std::true_type {};
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Владимир
template <typename T, typename = void>
struct has_less_v : std::false_type {};

template <typename T>
struct has_less_v<T, std::void_t<decltype(std::declval<T>() < std::declval<T>())>> : std::true_type {};
Без _v тогда уж. И насколько я знаю, реализовывать X через X_v это хорошо
источник

В

Владимир in supapro.cxx
Artöm Bakri Al-Sarmini
Без _v тогда уж. И насколько я знаю, реализовывать X через X_v это хорошо
Да, я просто Ваш код скопировал и переделал, Но структура будет наследовать буул валуеЮ так что _v норм
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Владимир
Да, я просто Ваш код скопировал и переделал, Но структура будет наследовать буул валуеЮ так что _v норм
Нет, не норм. X_v должен иметь тип бул
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Так сделано в стл, нарушение нейминга в этом месте сильно конфузит
источник

В

Владимир in supapro.cxx
Artöm Bakri Al-Sarmini
Нет, не норм. X_v должен иметь тип бул
Согласен, просто забыл об этих суфиксах
источник

В

Владимир in supapro.cxx
Artöm Bakri Al-Sarmini
Так сделано в стл, нарушение нейминга в этом месте сильно конфузит
побочка от частого использования boost::mpl
источник

D

Danya in supapro.cxx
Andrei Cherniuk
спасибо, код поправил
заодно и ошибку нашёл
Лучше сделай как было в Хромиуме, там это делается проще и читаемее
источник

C

Constantine in supapro.cxx
Language:
cpp


Source:
struct hmm : decltype  (auto) ... {  };


Errors:
1740436816/source.cpp:1:31: internal compiler error: in cxx_incomplete_type_diagnostic, at cp/typeck2.c:574
struct hmm : decltype  (auto) ... {  };
                              ^~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.


Note:
cplusplus_gcc assumed, other valid options are cplusplus_clang, visual_cplusplus, you can be more specific next time.
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Constantine
Language:
cpp


Source:
struct hmm : decltype  (auto) ... {  };


Errors:
1740436816/source.cpp:1:31: internal compiler error: in cxx_incomplete_type_diagnostic, at cp/typeck2.c:574
struct hmm : decltype  (auto) ... {  };
                              ^~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-7/README.Bugs> for instructions.


Note:
cplusplus_gcc assumed, other valid options are cplusplus_clang, visual_cplusplus, you can be more specific next time.
Хы
источник