ругается на метод foo? Ведь этот метод нигде не вызывается и, в моем понимании, компилятор не должен был пытаться его инстанцировать.
2. Возможен ли такой случай, что вычисление value будет отложено до инстанцирования foo?
Компилятор ругается на отсутствие std::is_same_v, которого видимо не было на gcc 6.4, а не на foo
Мой косяк. поправил пример
После инстанцирования Type<char> std::enable_if_t<value> перестаёт быть dependent кодом, а потом и инстанцируется сразу. Воркэраунд: template <bool Value = value, typename = std::enable_if_t<Value>> void foo() { .. }
А в этом примере почему работает? Ведь так же после инстанцирования value и, соответственно, Value, сразу известно... Аааа! До момента вызова foo компилятор не знает Value. Ведь это значение известно только в момент инстанцирования foo! Так?
А что по поводу второго вопроса?
Я его не понимаю. value будет вычислено сразу при инстанцировании класса, т.к. оно не dependent.
А можно ли сделать так, что value будет вычислено не сразу?
А зачем вообще знать когда оно будет вычислено
Показали уже пример
Зачем? В зависимости от цели можно придумать разные способы (более или менее удобные)
Академический интерес. В боевом коде показанный пример работает, как будто value становится зависимым.
Ну и костыли не нужны с концептами, конечно
Ну, например, я хочу чтобы изначальный пример скомпилировался. То есть, чтобы value в Type стало зависимым.
https://t.me/ProCxx/599967
Здесь value не становится зависимым. Зависимым становится Value.
тот же самый приём можно применить где угодно
Обсуждают сегодня