@ProCxx

Страница 1083 из 2477
Berkus
13.07.2017
07:45:46
Я меняю префикс но почему то cmake_install.cmake все равно хранит дефолтный
кэш стирай, если ты делаешь разные конфигурации - делай их в разных билд директориях

Vladislav
13.07.2017
07:47:35
Дед Пегас
13.07.2017
08:15:58
Мы тут пилим подкаст по плюсам и нам нужна небольшая помощь с выбором ведущего (ведущих): https://goo.gl/forms/RfS9Sk4Z56ldoThJ2

Google
zk
13.07.2017
08:19:10
CppCast'a не хватает?

Дед Пегас
13.07.2017
08:19:14
Да!

Alexander
13.07.2017
08:21:21
на самом деле мне хватает, просто получается такая штука, что: 1) Не все могут в английский 2) Наличие хороших альтернатив - не значит плохо (а вот вопрос про хорошесть крайне уместен, но это мы посмотрим ещё).

zk
13.07.2017
08:26:21
на самом деле мне хватает, просто получается такая штука, что: 1) Не все могут в английский 2) Наличие хороших альтернатив - не значит плохо (а вот вопрос про хорошесть крайне уместен, но это мы посмотрим ещё).
не все могут в качество, GolangShow например, после CppCast'a такая хуйня — по крайней мере мне так показалось это я к тому, что есть шанс скатится в какашку, ну или начать с нее

но вообще, да, подкаст это круто

Constantine
13.07.2017
08:40:39
Что-то я все еще очень расстроен этим примером std::function<void()> lambda = [&] () { return lambda; };

Pepe
13.07.2017
08:41:54
Победил проблему в симейке. Как то установил переменную и перебилдил.

Vladislav
13.07.2017
08:42:51
А в чем беда?
Type-safety страдает

Scarf
13.07.2017
08:43:28
Berkus
13.07.2017
08:44:21
а варнингами про неинициализированную lambda оно тебя не закидывает?

Google
Vladislav
13.07.2017
08:45:13
Как?
Один тип функций молча кастится к другому

Berkus
13.07.2017
08:45:23
а, там капчур, ок

Владислав
13.07.2017
08:45:45
а кто учавствует в первом подкасте?

о чём будете говорить?

Constantine
13.07.2017
08:46:59
Проблема конечно что это мне вчера взорвало ногу примерно вот так std::function<CStringA()> echo = [](CStringA s){ return s == "" ? "" : s; }

Scarf
13.07.2017
08:47:50
Ну да, ты не сказал, что у тебя функция должна что-то принимать

Vladislav
13.07.2017
08:48:09
Один тип функций молча кастится к другому
Я конечно понимаю что в плюсах уже итак нет строгой типизации, но зачем нагнетать?

Scarf
13.07.2017
08:48:14
std::function же темплейт

Vladislav
13.07.2017
08:48:41
Constantine
13.07.2017
08:49:02
Это что за тернарка такая
Это упрощенный пример. Тернарка возвращает const char * , std::function конвертирует назад в CStringA, до свидания

Like
13.07.2017
08:49:14
Я про само условие

Scarf
13.07.2017
08:49:15
Дед Пегас
13.07.2017
08:49:20
а кто учавствует в первом подкасте?
Товарищ Полухин в качестве гостя.

Evgeniy
13.07.2017
08:49:28
о чём будете говорить?
Я послушал test.ogg. Забавно. Лол, джавка

Vladislav
13.07.2017
08:49:46
Но все же

Berkus
13.07.2017
08:49:55
prog.cc: In function 'int main()': prog.cc:9:1: error: conversion from 'main()::<lambda(std::__cxx11::string)>' to non-scalar type 'std::function<std::__cxx11::basic_string<char?)>' requested }; ну так и чо

Constantine
13.07.2017
08:49:56
Это так по стандарту, кстати, или реализация такая?
Ну этот пример компилит все, что я нашел std::function<CStringA()> echo = [](CStringA s){ return s == "" ? "" : s; }

Google
Berkus
13.07.2017
08:50:00
где тут выстрел в ногу

Scarf
13.07.2017
08:50:20
Это упрощенный пример. Тернарка возвращает const char * , std::function конвертирует назад в CStringA, до свидания
Потому что ты ее так обьявил! std::function это не какая-то магия, это тупой шаблон. Как обьявишь, так и будет вызываться и работать.

Berkus
13.07.2017
08:50:53
У него компилилось
он возможно инвалид что ли

prog.cc: In function 'int main()': prog.cc:9:1: error: conversion from 'main()::<lambda(std::__cxx11::string)>' to non-scalar type 'std::function<std::__cxx11::basic_string<char?)>' requested

не компилится, покажите работающий пример

Scarf
13.07.2017
08:51:30
не компилится, покажите работающий пример
Он использует не std::string, а ATL::CStringA

Constantine
13.07.2017
08:51:35
не компилится, покажите работающий пример
класс CStringA нельзя заменить на std::string в примере

Scarf
13.07.2017
08:51:59
Там возможен неявный каст в const char*

Berkus
13.07.2017
08:52:03
ну приведи тогда класс CStringA, я его за тебя выдумывать буду?

Scarf
13.07.2017
08:52:32
Это из майкрософтовской библиотеки шаблонов ATL

Berkus
13.07.2017
08:52:33
ссылку

я не пользуюсь ATL и прочими говноподелиями мс

Closed: cannot reproduce

Scarf
13.07.2017
08:53:23
https://git.reactos.org/?p=reactos.git;a=blob;f=reactos/sdk/lib/atl/cstringt.h;hb=222cce68149ded6fe2abc5b6295ce982c7e68222#l288

Из ReactOS

Berkus
13.07.2017
08:54:08
что из этого важно?

Google
Berkus
13.07.2017
08:54:16
Там возможен неявный каст в const char*

Constantine
13.07.2017
08:54:24
именно

Berkus
13.07.2017
08:54:26
и?

Anatoly
13.07.2017
08:54:28
Severity Code Description Project File Line Suppression State Error C2440 'initializing': cannot convert from 'CMFCApplication5App::{ctor}::<lambda_152cda3ab2ae79cb0a18d1c14222c378>' to 'std::function<CStringA (void)>' MFCApplication5 c:\users\stranger\documents\visual studio 2015\projects\mfcapplication5\mfcapplication5\mfcapplication5.cpp 30

Vladislav
13.07.2017
08:54:34
Closed: cannot reproduce
https://xkcd.com/583/

Admin
ERROR: S client not available

Anatoly
13.07.2017
08:54:39
разные сигнатуры

Berkus
13.07.2017
08:54:40
оно ругается на разные сигнатуры да, причем тут неявное приведение?

Constantine
13.07.2017
08:55:02
ой сорри

Scarf
13.07.2017
08:55:12
Суть в том, что а) неявные касты - плохо б) надо обьявлять все нормально /тхреад

Constantine
13.07.2017
08:55:17
std::function<CStringA(CStringA)> echo = [](CStringA s){ return s == "" ? "" : s; }

параметр не указал

Scarf
13.07.2017
08:55:48
Constantine
13.07.2017
08:55:53
разные сигнатуры
ловите исправленный

Scarf
13.07.2017
08:56:22
Указывай все типы явно и не стреляй себе в ногу

Constantine
13.07.2017
08:56:46
Я выбросил std::function и больше не стреляю себе в ногу, да

Scarf
13.07.2017
08:57:23
https://www.youtube.com/watch?v=HvEhOKkfoSo

Constantine
13.07.2017
08:58:04
Возможность преобразования возвращаемого типа - явная ошибка std::function

Google
Anatoly
13.07.2017
08:59:00
ну

std::function<CStringA(CStringA)> a = [](CStringA s) { return "" + s; }; auto s = a("34");

возвращает CStringA

Constantine
13.07.2017
08:59:52
std::function<CStringA(CStringA)> a = [](CStringA s) { return "" + s; }; auto s = a("34");
в тернарке s == "" ? "" : s отрабатывает type deduction и говорит вернуть const char*

в тернарке s != "" ? s : "" вернет CStringA

Scarf
13.07.2017
09:00:26
Возможность преобразования возвращаемого типа - явная ошибка std::function
Нет, это твоя ошибка. Преобразование типов это то, что ты сам хочешь получить :)

Constantine
13.07.2017
09:00:45
Нет, это твоя ошибка. Преобразование типов это то, что ты сам хочешь получить :)
Я не хочу получать преобразование типа указателя на функцию

Vladislav
13.07.2017
09:00:53
Scarf
13.07.2017
09:01:04
Я не хочу получать преобразование типа указателя на функцию
Так обьяви std::function нормально, лол. И лямбду тоже.

Anatoly
13.07.2017
09:02:40
return s == "" ? CStringA("") : s;

Constantine
13.07.2017
09:02:41
Так обьяви std::function нормально, лол. И лямбду тоже.
Лол мы обсуждаем вопрос что я виноват потому что я накосячил, а то что std::function выполнил по сути преобразование типа LPCSTR (*)(CStringA) в CStringA (*)(CStringA) тебя не напрягает?

дык, это проблема CStringA
это преобразование почти всегда безопасно

Anatoly
13.07.2017
09:03:14
но в данном случае нет

Constantine
13.07.2017
09:03:25
в данном случае это ошибка std::function

Scarf
13.07.2017
09:04:25
Лол мы обсуждаем вопрос что я виноват потому что я накосячил, а то что std::function выполнил по сути преобразование типа LPCSTR (*)(CStringA) в CStringA (*)(CStringA) тебя не напрягает?
std::function принимает не тип функциональной ссылки, а возвращаемый тип и список типов аргументов. Преобразование происходит не самой лямбды, а в operator().

Страница 1083 из 2477