Size: a a a

cxx.Дискуссионная

2020 February 08

O

Ofee in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Это разные вещи. Ассерт не влияет на кандидатность
У меня нет SFINAE, я хочу лишь хочу сразу отсечь заведомо неправильные аргументы. Да, после такой формулировки стало очевиднее, что нужен static_assert
источник

O

Ofee in cxx.Дискуссионная
Artöm Bakri Al-Sarmini
Концепт
У меня на часах ещё только 3 ночи, концепты пока не подвезли в каждый компилятор...
источник

O

Ofee in cxx.Дискуссионная
Oleg Kizilov
Зачем тебе етот енум?
Незачем, мы обсуждали читаемось и речь зашла о ситуации, когда у нас есть значительное число значений в одном перечислении, это просто сгенерированные примеры
источник

RM

Roy Mustang in cxx.Дискуссионная
SFINAE, SPULAE pkch-pkch MULAE
источник

RM

Roy Mustang in cxx.Дискуссионная
При декомпозиции std::pair или std::tuple я получаю значения или ссылки?
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
При декомпозиции std::pair или std::tuple я получаю значения или ссылки?
Полагаю, ты об этом:
>> Like a reference, a structured binding is an alias to an existing object. Unlike a reference, the type of a structured binding does not have to be a reference type.
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
Полагаю, ты об этом:
>> Like a reference, a structured binding is an alias to an existing object. Unlike a reference, the type of a structured binding does not have to be a reference type.
А можно на русском? Не понял сути
источник

RM

Roy Mustang in cxx.Дискуссионная
Что значит не обязательно должен быть ссылочным типом
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
А можно на русском? Не понял сути
Выглядит как ссылка, ведёт себя (почти) как ссылка, только не ссылка
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Что значит не обязательно должен быть ссылочным типом
Например, если не ошибаюсь, ссылку захватить в лямбду ты можешь, а structured binding — нет, что, впрочем, должно исправиться стандартом...
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
Например, если не ошибаюсь, ссылку захватить в лямбду ты можешь, а structured binding — нет, что, впрочем, должно исправиться стандартом...
Верно понимаю, что декомпозиция - это structured binding ?
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Верно понимаю, что декомпозиция - это structured binding ?
Я слово декомпозиция понял именно так. Не исключено, что это довольно близко к истине...
источник

IO

Igor Okhremchuk in cxx.Дискуссионная
Декомпозиция - любая распаковка
источник

IO

Igor Okhremchuk in cxx.Дискуссионная
В том числе через гет и акцесоры
источник

O

Ofee in cxx.Дискуссионная
Roy Mustang
Верно понимаю, что декомпозиция - это structured binding ?
Вот смотри ещё магию, собранную на коленке:
struct Foo {
   using type = void;
   int value = 0;
};

// Это работает, ибо почему нет?
Foo foo1;
using FooAlias1 = decltype(foo1)::type;

// Упс, уже не работает, ссылка — не класс
// Foo& foo2  = foo1;
// using FooAlias2 = decltype(foo2)::type;

// А что тут у нас?
std::tuple<int, Foo> t(42, {33});
// Должно же тоже быть ссылкой
// и не компилироваться?
auto& [i, foo3] = t;
using FooAlias3 = decltype(foo3)::type;
// Но оно даже компилируется, а ещё,
// мы можем изменить значение t,
// а это ведь даже не ссылка и тем более не указатель:
foo3.value = 55;
std::cout << std::get<1>(t).value << std::endl;
источник

O

Ofee in cxx.Дискуссионная
Igor Okhremchuk
В том числе через гет и акцесоры
Думаешь, речь шла о них?
источник

IO

Igor Okhremchuk in cxx.Дискуссионная
Ну это не магия, можно использовать как лвалуе даже
источник

O

Ofee in cxx.Дискуссионная
Ofee
Вот смотри ещё магию, собранную на коленке:
struct Foo {
   using type = void;
   int value = 0;
};

// Это работает, ибо почему нет?
Foo foo1;
using FooAlias1 = decltype(foo1)::type;

// Упс, уже не работает, ссылка — не класс
// Foo& foo2  = foo1;
// using FooAlias2 = decltype(foo2)::type;

// А что тут у нас?
std::tuple<int, Foo> t(42, {33});
// Должно же тоже быть ссылкой
// и не компилироваться?
auto& [i, foo3] = t;
using FooAlias3 = decltype(foo3)::type;
// Но оно даже компилируется, а ещё,
// мы можем изменить значение t,
// а это ведь даже не ссылка и тем более не указатель:
foo3.value = 55;
std::cout << std::get<1>(t).value << std::endl;
gcc-8 и c++17, если что, не ручаюсь, что тут нет нарушений стандарта...
источник

O

Ofee in cxx.Дискуссионная
Igor Okhremchuk
Ну это не магия, можно использовать как лвалуе даже
Вообще, должно выглядеть как магия. Наверное... Для нормальных людей... И меня несколько пугает то, что, прочтя три строчки на cppreference, я додумался до такого извращённого примера...
источник

RM

Roy Mustang in cxx.Дискуссионная
Я посмотрел урок по декомпозиции
источник