Size: a a a

2020 December 20

P

Petrus in pro.cxx
Побитый Кирпич
std::vector<std::vector<std::vector<T>>>
еще бы я это понял
источник

LA

Liber Azerate in pro.cxx
Petrus
еще бы я это понял
источник

D

Danya in pro.cxx
Petrus
еще бы я это понял
Ещё бы ты читал описание чата, куда пишешь
источник

P

Petrus in pro.cxx
спасибо
источник

NK

Nikolay Kononov in pro.cxx
template<class Functor, class Arg>
decltype(auto) try_invoke(Functor &&f, Arg &&arg) {
   if constexpr (std::is_invocable_v<Functor, Arg>) {
       return std::forward<Functor>(f)(std::forward<Arg>(arg));
   }
   else {
       return std::forward<Arg>(arg);
   }
}

Привет, можете подсказать, почему если убрать else gcc ругается и говорит :

error: inconsistent deduction for auto return type: ‘std::pair<int, int>’ and then ‘int&’
  52 |     return std::forward<Arg>(arg);
источник

D

Danya in pro.cxx
Nikolay Kononov
template<class Functor, class Arg>
decltype(auto) try_invoke(Functor &&f, Arg &&arg) {
   if constexpr (std::is_invocable_v<Functor, Arg>) {
       return std::forward<Functor>(f)(std::forward<Arg>(arg));
   }
   else {
       return std::forward<Arg>(arg);
   }
}

Привет, можете подсказать, почему если убрать else gcc ругается и говорит :

error: inconsistent deduction for auto return type: ‘std::pair<int, int>’ and then ‘int&’
  52 |     return std::forward<Arg>(arg);
1) надо показать минимально воспроизводимый пример
2) inline не нужен
источник

ПК

Побитый Кирпич... in pro.cxx
Nikolay Kononov
template<class Functor, class Arg>
decltype(auto) try_invoke(Functor &&f, Arg &&arg) {
   if constexpr (std::is_invocable_v<Functor, Arg>) {
       return std::forward<Functor>(f)(std::forward<Arg>(arg));
   }
   else {
       return std::forward<Arg>(arg);
   }
}

Привет, можете подсказать, почему если убрать else gcc ругается и говорит :

error: inconsistent deduction for auto return type: ‘std::pair<int, int>’ and then ‘int&’
  52 |     return std::forward<Arg>(arg);
На годболт запости код с ошибкой
источник

NK

Nikolay Kononov in pro.cxx
источник

D

Danya in pro.cxx
Пахнет очередной багой стандарта...
источник

D

Danya in pro.cxx
Но у меня другой вопрос
Разве std::tuple может держать ссылки? В cppref написано, что каждый тип в его шаблонных аргументах должен быть trivially destructible
Ссылки разве являются такими?
источник

D

Dmitriy in pro.cxx
Danya
Но у меня другой вопрос
Разве std::tuple может держать ссылки? В cppref написано, что каждый тип в его шаблонных аргументах должен быть trivially destructible
Ссылки разве являются такими?
Может
источник

D

Dmitriy in pro.cxx
Посмотри std::tie
источник

D

Danya in pro.cxx
Был не прав
источник

ПК

Побитый Кирпич... in pro.cxx
Danya
Но у меня другой вопрос
Разве std::tuple может держать ссылки? В cppref написано, что каждый тип в его шаблонных аргументах должен быть trivially destructible
Ссылки разве являются такими?
Там не так сказано
источник

ПК

Побитый Кирпич... in pro.cxx
If std::is_trivially_destructible<Ti>::value is true for every Ti in Types, the destructor of tuple is trivial.
источник

ПК

Побитый Кирпич... in pro.cxx
Это if
источник

D

Danya in pro.cxx
А, был неправ дважды
источник

D

Danya in pro.cxx
Простите, зря быканул
источник

AT

Alexander Tulikov in pro.cxx
Потому что у тебя в функции два return с разными типами. С else  у тебя второй return будет под if constexpr и не будет влиять на вывод возвращаемого типа.
источник

D

Danya in pro.cxx
Alexander Tulikov
Потому что у тебя в функции два return с разными типами. С else  у тебя второй return будет под if constexpr и не будет влиять на вывод возвращаемого типа.
Ну я думаю вопрос в том, почему, если он не в else,  он влияет на вывод типа?
источник