Size: a a a

2021 July 31

c

codingteam@cjr in codingteam
(<*>).(<*>)
т.е. я возвратить должен ParsingResult<JsonString, I>, а по факту внутри std::visit невозбранно возвращаю ParsingResult<JsonBool, I>
источник

A

Alex Ф-ф-фэils!🌠︙... in codingteam
C++11 и C++20
источник

A

Alex Ф-ф-фэils!🌠︙... in codingteam
Жди is и as из шарпов)
источник

A

Alex Ф-ф-фэils!🌠︙... in codingteam
А у тебя они ковариантны?
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)

struct JsonString: tuple<string> {};
struct JsonBool: tuple<bool> {};
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
string не может же каститься в bool?
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
и наоборот
источник

A

Alex Ф-ф-фэils!🌠︙... in codingteam
Не должен
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
я так понял is_same_v просто всегда false
источник

A

Alex Ф-ф-фэils!🌠︙... in codingteam
Хотя в мсвц был баг кажется
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
и в этом всё дело
источник

A

Alex Ф-ф-фэils!🌠︙... in codingteam
Проверь is_derived_from (?)
источник

FO

FORTRAN ONE LOVE in codingteam
Fortran 2003
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
там похоже нужно было для аргумента добавить decay_t<> и привести результат лямбды std::visit к более общему типу:


» return visit([input](auto&& value) -> ParsingResult<JsonString, I> {
»  using T = decay_t<decltype(value)>;
»  if constexpr (is_same_v<T, JsonString>)
»   return make_parsing_success<JsonString, I>(
»

вот так он мне не даёт JsonBool вернуть. а реквестируемый тип успешно парсится
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
auto&& — это же какой-то сложный поинтер
источник

c

codingteam@cjr in codingteam
(<*>).(<*>)
у кого-нибудь есть короткое объяснение что означает вообще auto&& ? я это взял из доки по std::visit
источник

c

codingteam@cjr in codingteam
Minoru
максимально кратко и не совсем точно: это ссылка, значение по которой можно не только копировать, но и перемещать
источник

c

codingteam@cjr in codingteam
Minoru
ссылка это такой необнуляемый указатель
источник

c

codingteam@cjr in codingteam
Minoru
копирование это, ну, либо копирование битиков (для POD, про которые мы уже говорили), либо вызов конструктора копирования `X(const X&)`, либо вызов оператора копирования `X& operator=(const X&)`. После копирования исходный объект остаётся неизменным, у тебя просто появляется его клон (shallow или deep — зависит от того, что внутри объекта и какой код в конструкторе и операторе)
источник

c

codingteam@cjr in codingteam
Minoru
перемещение — это когда вместо копирования ты просто «забираешь» чужие ресурсы. Для простых штук (вроде int, double…) это просто копирование битов, для сложных (например, std::string, std::shared_ptr…) это означает, что мы забираем из них указатель и обнуляем их. Перемещение выполняется конструкторами и оператором перемещения (`X(X&&)`, `X& operator(X&&)`)
источник