Igor
If B is true, std::enable_if has a public member typedef type, equal to T; otherwise, there is no member typedef. т.е. если условие выполняется, то в struct enable_if есть тайпдеф на живой и здоровый тип, если не выполняется - то тайпдеф происходит на какую-то хрень, которой быть не может, продолжение вывода или ошибка компиляции, если продолжать некуда
Aidar
Только енейбл иф это не всегда сфинае
Anatoly
Поэтому нужен исскуственный параметр шаблона, ибо без него SFINAE не будет, будет просто ошибка компиляции
Constantine
если без много букав, то SFINAE касается только S
Igor
кхм т.е. если мы вешаем enable_if на не-шаблонный метод шаблонного класса template<typename T> class Something, то SFINAE не сработает потому что на момент "обработки" метода тип уже подставлен?
Constantine
enable_if_t<...> это typename enable_if<...>::type так что enable_if_t<false> это ill-formed
Constantine
enable_if<false> не содержит type
Igor
дошло, спасибо
Igor
нет стоп, не дошло 9_6
Constantine
enable_if_t<false> f() это все еще ошибка компиляции
Igor
одну минуту, ещё раз обдумаю
Constantine
SFINAE говорит, что если синтез декларации чего-то шаблонного не удался с текущими параметрами подстановки, надо сделать вид, что ничего не произошло и этого чего-то шаблонного просто и нет
Constantine
template <bool Condition> struct some { enable_if_t<Condition> foo() { //ошибка компиляции, не было шаблонной подстановки } };
Igor
всё, уяснил, и эхом что-то из Майерса вспомнилось даже на эту тему большое спасибо
Constantine
struct some2 { template <typename T> enable_if_t<!std::is_same_v<T, void>> foo(std::plus<T>) { //эту функцию просто не надо инстанцировать для plus<void> } };
Дмитрий ⬡
Чат, как это вообще парсится? https://goo.gl/pNPy7s
Igor
—context-dependant keyword во всей красе, насколько я могу судить— вру, auto к ним не относится, только override / final
Vladislav
ехал auto через auto видит auto - в реке auto сунул auto auto в auto auto auto auto auto
Constantine
забавно, а using auto = decltype(auto​()); нельзя
Constantine
прямо вопрос на идиотское собеседование
Vladislav
чего это нельзя? https://godbolt.org/g/XrSem7
Vladislav
(а я уж думал что нашелся еще пример различия using и typedef кроме шаблонных биндингов)
Oleg
Чат, как это вообще парсится? https://goo.gl/pNPy7s
А почему там int main ()… а не auto main ()…?
Constantine
хм
Constantine
чего это нельзя? https://godbolt.org/g/XrSem7
я походу написал криво
Constantine
constexpr auto auto​​​​​​​ = auto​​​​​<auto​​,auto​​,auto​​,auto​​,auto​​,auto​​>(); constexpr auto auto​​​​ = auto​​​​​<auto​​,auto​​,auto​​,auto​​,auto​​,auto​​,auto​​>(); я ниасиливаю вот этот фрагмент
Constantine
почему здесь не происходит дублирование
Vladislav
ехал auto через auto видит auto - в реке auto сунул auto auto в auto auto auto auto auto
int main() { auto over = auto(); using auto​​ = decltype(auto​()); constexpr auto​​ auto​​​ = auto​(); auto<auto, auto, auto> }
Oleg
И почему в следующей строчке (auto*auto) эти auto берутся в правильном порядке. Я вот вообще что-то не знаю, что означает auto в качестве имени переменной.
Anatoly
короч это фейк
Oleg
Там поддельные auto, точно.
Vladislav
юникод?
Anatoly
>>> ''' constexpr auto auto​() '''.encode() b'\nconstexpr auto auto\xe2\x80\x8b()\n'
Oleg
Ага, что-то вроде Zero-Width-Joiner к ним приписано.
Anatoly
угу
Constantine
читеры
Anonymous
хелло
Constantine
\u{200b}
Constantine
zero-width space
Anonymous
как топ элемент в стэке получить через функцию, не используя библиотеку?
Anonymous
что-то в голову ничего не приходит
Constantine
вот в 6 осле я бы сразу заметил, потому что он в моноширинных шрифтах zero width символы показывал в полную ширину при выделении
Anonymous
top элемент как получить в стэке?
Anatoly
в каком стэке?
Anonymous
есть библиотека stack и через ее это очень просто делается
Anatoly
где там?
Berkus
top элемент как получить в стэке?
можно поконкретней, какой из миллионов стеков ты имеешь в виду?
Anonymous
их бывает миллион?
Anonymous
)
Anonymous
да
Anonymous
но
Anonymous
void Stack::pop() { if (!isEmpty()) { length--; } else cout « "стэк пуст" « endl;
Anonymous
это для pop
Anatoly
@supapro
Anonymous
@supapro
Igor
и @нет_наркотикам заодно
Anonymous
понял
Anonymous
спс
Anatoly
почему тот чат называется "supapro"?
Constantine
ох уж эти плюсы https://godbolt.org/g/dBTtmF
Constantine
g + g будет ошибкой компиляции
Constantine
я пытаюсь построить пример, когда g + g будет синтаксически корректным и g будет обозначать разное
Alexander "SonnySlave"
Alexander "SonnySlave"
можно сделать ещё через макросы
Constantine
ээээээ щито
Vladislav
хитрееец
сорри, не удержался 😊
Constantine
а
Constantine
понапробелили
Constantine
> struct X {} g а я думал этот синтаксис MS расширение