Constantine
да это не важно
Constantine
все что ты написал - общее
Constantine
все что ты притащил - твой гемор
Constantine
не тащи библиотеки за одну функцию, короче
Berkus
генеральный спонсор - велосипедостроительный завод
Berkus
http://mainisusuallyafunction.blogspot.com/2017/06/a-rust-view-on-effective-modern-c.html
Arseny
Кто-нибудь может пояснить почему все так?
vector<string>({"A", "B"}); // OK
vector<string>("A", "B"); // CE
make_unique<vector<string>>("A", "B"); // CE
make_unique<vector<string>>({"A", "B"}); // CE
auto tmp = {"A", "B"};
make_unique<vector<string>>(tmp); // OK (только под msvc17)
Constantine
> make_unique<vector<string»("A", "B"); // OK
Constantine
????
Constantine
std::make_unique<std::vector<std::string>>("A", "B"); //CE: MSC 14 Update 3
Arseny
Вот и я удивился. Это у меня YCM врет.
Constantine
std::make_unique<std::vector<std::string>>({ "A", "B" }); //CE: MSC 14 Update 3 (????)
Arseny
Ладно, тогда вопрос пока снят.
Constantine
интересно почему он не смог сфорвардить инит лист
Arseny
Но на самом деле основная грусть в том, что в make_unique нельзя передавать то же, что в обычный конструктор
Arseny
И я плохо понимаю почему.
Constantine
error C2664: 'std::vector<std::string,std::allocator<_Ty»::vector(const std::vector<_Ty,std::allocator<_Ty» &)': cannot convert argument 1 from 'std::initializer_list<const char *>' to 'const std::allocator<_Ty> &'
Constantine
забавная ошибка
Constantine
auto type = { "A", "B" };
std::make_unique<std::vector<std::string>>(type); //меняется тип переданной переменной
Constantine
так что это, вроде, понятно
Constantine
вместо && получается &
Arseny
О, забавно. А под clang и gcc с auto все равно не компилируется.
Constantine
ну MSC 14 U3 не компилит никакую версию с std::make_unique
Constantine
возможно, прикол в том, что perfect forwarding не настолько perfect, когда речь о разрешении перегрузки функции?
Arseny
https://godbolt.org/g/vihPfL
Constantine
vector(_XSTD initializer_list<value_type> _Ilist,
const _Alloc& _Al = allocator_type())
Constantine
в MSC объявлен так
Constantine
так что std::initializer_list<const char*> ему не подходит
Arseny
Но в случае vector<string>({"A", "B"}); семантика какая-то иная?
Constantine
std::initializer_list<std::string> list = { "A", "B" };
std::make_unique<std::vector<std::string>>(std::move(list)); //OK
Constantine
Arseny
Интересно баг это стандарта или фича. В смысле планируется ли исправлять.
Еще и move-ать initializer list нельзя, как я помню.
Constantine
вероятно прикол в том, что нельзя мувать и создавать из ссылок
Constantine
хотя это парадокс
Constantine
std::initializer_list<std::string> list = { "A", "B" };
Constantine
это же скомпилировалось
Arseny
Так и vector<string> v = {"A", "B"}; компилируется
Arseny
Александр
к спору выше: все же помнят, что string умеет конструироваться из (const char* it_begin, const char* it_end), причем для литералов будет нерабочий код?
Constantine
🦥Alex Fails
Moved to #holywar s
pinnokio
Алекс, что за фигня: вбросы про джаву и "си++ несовсместим с перформансом" - это ок, а разговор про смарты - холивар? dafuq?
Deleted Account
Berkus
Vladislav
Multiple inheritance in C++
Alexandr
Не факт. В даже фактически унаследоваться можно не более, чем от одного класса, но реализовать сколь угодно много интерфейсов
Constantine
А какая разница снизу? Будет тот же самый QueryInterface код, только в С++ это будет QuerySomeBase
Constantine
Vladislav
Berkus
Anonymous
Список книг, видео и курсов по машинному обучению и математике, всё на русском языке. Большая, качественная подборка. Почти все pdf'ки книг гуглятся.
https://ru.stackoverflow.com/a/683632/1084
Vladislav
Anonymous
Вообще то в топе там самый свежак
Anonymous
Но есть и классика да, она может быть старая, но никогда не теряет акутальности, её просто надо знать
Vladislav
Алдар
бред изучать мл на русском
Roman
макрос:
#define $Test(casename) void casename (testing::TestCase* test)
используется так:
$Test(verifyCase) {
//...
}
$Add(verifyCase)
хотелось бы исбавиться от $Add и при вызове макроса $Test зарегистрировать созданную функцию в глобальном объекте типа:
...
testing::Test::getInstance().define( casename )
...
но к сожалению ДО определения функции этого сделать не получается по очевидной причине, взять function body в качестве параметра макроса не могу, ибо тогда весь body inline'ится в одну строку и __LINE__ внутри блока отображает конечную строку макроса а не свою индивидуальную, конкретную строку
есть какой нибудь Workaround?
vladislav
Berkus
Berkus
мне норм
Roman
Vladislav
vladislav
язык пушкина, есенина и маяковского
vladislav
зря вы так
Алдар
зачем учить на русском, если можно на английском и все термины сразу понимать
Berkus
в смысле?
в смысле тестирую асинхронный код в Catch и boost.test и все норм
Roman
vladislav
давай зачётку
Vladislav
Английский сейчас - как латынь раньше, изучать что-то на других языках (научно/техническое) - контрпродуктивно
Roman
vladislav
Да это ясно, я ж шучу