Size: a a a

2020 July 19

AC

Andrei Cherniuk in supapro.cxx
но почему это не работает?
источник

TS

Till Schneider in supapro.cxx
Andrei Cherniuk
нууу, 17. пытаюсь ручками реализовать
буду идти к более изящному решению - пока что хочу понять, где проблема
Или сюда
источник

TS

Till Schneider in supapro.cxx
Andrei Cherniuk
но почему это не работает?
Потому что там нет SFINAE ?!
источник

TS

Till Schneider in supapro.cxx
Andrei Cherniuk
Доброй ночи, подскажите, где ошибка?

#include <iostream>

template <class T>
struct has_operator_less
{
   static char f(...);

   template <class C>
   static decltype(std::declval<C>().operator<(std::declval<C>()), int()) f(int);

   static constexpr bool has = sizeof(f(0)) == sizeof(int);
};

struct S
{
   bool operator<(const S & a) const { return this->field == a.field; }
   int field = 0;
};

int main() {
   std::cout << has_operator_less<S>::has;

   return 0;
}
Очень похоже на попытку грязного хака из 98 стандарта с применением новых фич, хотя все это пишется гораздо легче и лаконичнее, а, главное, читабельнее
источник

D

Danya in supapro.cxx
Ля забавно, а почему у них используется разный код стайл для тайп трейтов?
Я про строки 41-43
источник

TS

Till Schneider in supapro.cxx
Danya
Ля забавно, а почему у них используется разный код стайл для тайп трейтов?
Я про строки 41-43
Можешь спросить овнера
источник

D

Danya in supapro.cxx
Till Schneider
Можешь спросить овнера
Мне не настолько не пофиг
источник

В

Владимир in supapro.cxx
Andrei Cherniuk
Доброй ночи, подскажите, где ошибка?

#include <iostream>

template <class T>
struct has_operator_less
{
   static char f(...);

   template <class C>
   static decltype(std::declval<C>().operator<(std::declval<C>()), int()) f(int);

   static constexpr bool has = sizeof(f(0)) == sizeof(int);
};

struct S
{
   bool operator<(const S & a) const { return this->field == a.field; }
   int field = 0;
};

int main() {
   std::cout << has_operator_less<S>::has;

   return 0;
}
А что за ошибка? Попробуйте declval<c>().template operator<(...) Но лучше сделать перегрузку с свиньёй.
источник

ip

illya palkin in supapro.cxx
try {
       std::regex re("(\?([^#]*))?");
   }
   catch (const std::exception& e) {
       std::cout << e.what() << '\n'; // Invalid special open parenthesis.
   }

Что я не так делаю ?
источник

АВ

Александр Водянников... in supapro.cxx
Загони регулярку в любой онлайн для регулярок, подскажет
источник

ip

illya palkin in supapro.cxx
Александр Водянников
Загони регулярку в любой онлайн для регулярок, подскажет
Загонял уже, все нормально
источник

АВ

Александр Водянников... in supapro.cxx
\ наверное ескейпить надо
источник

АВ

Александр Водянников... in supapro.cxx
или используй raw строки чтобы не эскейпить
источник

ip

illya palkin in supapro.cxx
Все, нашел
источник

ip

illya palkin in supapro.cxx
Александр Водянников
\ наверное ескейпить надо
Угу, надо было \\?
источник

АВ

Александр Водянников... in supapro.cxx
вместо "(\?([^#]*))?" попробуй R"((\?([^#]*))?)"
источник

ip

illya palkin in supapro.cxx
Хотя, это вроде паттерн меняет
источник

ip

illya palkin in supapro.cxx
но проблема точно в этой \?
источник

АВ

Александр Водянников... in supapro.cxx
Лично я когда встречается текст где надо эскейпить - юзаю raw строки, так читабельнее чем высматривать \
источник

АВ

Александр Водянников... in supapro.cxx
Ну в твоем случае ессно надо \ заменить на \\
источник