170 похожих чатов

Есть пример кода. По нему есть два вопроса: 1. Почему компилятор

ругается на метод foo? Ведь этот метод нигде не вызывается и, в моем понимании, компилятор не должен был пытаться его инстанцировать.

2. Возможен ли такой случай, что вычисление value будет отложено до инстанцирования foo?

16 ответов

12 просмотров

Компилятор ругается на отсутствие std::is_same_v, которого видимо не было на gcc 6.4, а не на foo

d7d1cd- Автор вопроса

После инстанцирования Type<char> std::enable_if_t<value> перестаёт быть dependent кодом, а потом и инстанцируется сразу. Воркэраунд: template <bool Value = value, typename = std::enable_if_t<Value>> void foo() { .. }

d7d1cd- Автор вопроса
Alexander Karaev
После инстанцирования Type<char> std::enable_if_t<...

А в этом примере почему работает? Ведь так же после инстанцирования value и, соответственно, Value, сразу известно... Аааа! До момента вызова foo компилятор не знает Value. Ведь это значение известно только в момент инстанцирования foo! Так?

d7d1cd- Автор вопроса

А что по поводу второго вопроса?

d7d1cd
А что по поводу второго вопроса?

Я его не понимаю. value будет вычислено сразу при инстанцировании класса, т.к. оно не dependent.

d7d1cd- Автор вопроса
Alexander Karaev
Я его не понимаю. value будет вычислено сразу при ...

А можно ли сделать так, что value будет вычислено не сразу?

А зачем вообще знать когда оно будет вычислено

d7d1cd
А можно ли сделать так, что value будет вычислено...

Зачем? В зависимости от цели можно придумать разные способы (более или менее удобные)

d7d1cd- Автор вопроса
Kelbon
А зачем вообще знать когда оно будет вычислено

Академический интерес. В боевом коде показанный пример работает, как будто value становится зависимым.

Alexander Karaev
После инстанцирования Type<char> std::enable_if_t<...

Ну и костыли не нужны с концептами, конечно

d7d1cd- Автор вопроса
Alexander Karaev
Зачем? В зависимости от цели можно придумать разны...

Ну, например, я хочу чтобы изначальный пример скомпилировался. То есть, чтобы value в Type стало зависимым.

d7d1cd- Автор вопроса
Kelbon
https://t.me/ProCxx/599967

Здесь value не становится зависимым. Зависимым становится Value.

d7d1cd
Здесь value не становится зависимым. Зависимым ст...

тот же самый приём можно применить где угодно

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
53
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
16
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
буквально один оставшийся вопрос при выполнении строчки mov eax, 5 операнд "5" будет присутствовать где-либо в памяти (любой), кроме как в памяти блока .code? подвопрос: как...
12
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
14
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
6
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
11
Карта сайта