- 1
- 2
- 3
- 4
- 5
- 6
- 7
template<class T, T = 1>
constexpr bool __can_one(int) { return true; };
template<class T>
constexpr bool __can_one(long) { return false; };
template <class T>
constexpr bool is_integral_v = __can_one<T>(0);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+4
template<class T, T = 1>
constexpr bool __can_one(int) { return true; };
template<class T>
constexpr bool __can_one(long) { return false; };
template <class T>
constexpr bool is_integral_v = __can_one<T>(0);
https://twitter.com/ericniebler/status/976524085927731200
Не кто попало, а автор Ranges TS (без пяти минут кусок стандарта) сомневается, валидную метушню он написал или нет. Пора уже создавать крестоблядский суд, который будет трактовать букву стандарта и решать, где с++ а где нет. И разрабы гцц будут нанимать за бешеное бабло крестоблядских юристов и судиться в крестоблядском суде с авторами багрепортов.
Elvenfighter 22.03.2018 03:20 # 0
И оно таки сопоставимо с std::is_integral_v
Antervis 25.03.2018 00:08 # 0
Это же просто опускание имени переменной, так?
Как именно отсекаются типы с плавающей точкой и пользовательские типы, конструируемые из 1?
Antervis 25.03.2018 00:16 # +2