|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Два вызова constexpr функции (вычисляемой при компиляции) дают разные результаты. Прикол в том, что это полностью стандартное поведение без UB. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Тут объяснение http://b.atch.se/posts/non-constant-constant-expressions/ Если кратко то значение функции зависит от того инстанцирован ли некий шаблон до ее вызова, а в первом месте ее вызова этот шаблон инстанцируется, поэтому следующий вызов дает другой результат. Там есть и более короткий пример на основе noexcept, но он не работает в Clang т.к. GCC и Clang по разному трактуют стандарт. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 16:55 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
бойан ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 17:37 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
a.guest, ты уже во всем этом разобрался? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 17:44 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
mayton, по памяти 100% точно не перескажу в чём фишка, а прочитал давно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 17:53 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Рад что для тебя здесь нет вопросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 17:58 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky, почему стоит "fail" при одинаковых результатах? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 18:48 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
OoCcпочему стоит "fail" при одинаковых результатах? Потому что должны быть разные )) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 19:09 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Потому что это два разных инстанцирования шаблонной функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 19:12 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyПотому что это два разных инстанцирования шаблонной функции.Это не шаблонная функция а издевательство над здравым смыслом. И вообще, шаблоны зло. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 20:49 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Скорее злом является мета-программирование в которое нельзя зайти отладчиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 21:30 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyПрикол в том, что это полностью стандартное поведение без UB. https://stackoverflow.com/questions/51601439/constexpr-counter-that-works-on-gcc-8-and-is-not-restricted-to-namespace-scope#comment90170666_51601439 тут пишут что подобное использование шаблонов может попадать под https://timsong-cpp.github.io/cppwp/n4659/temp.res#8.4 Если это так, то тут UB (начиная с C++17). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2019, 21:43 |
|
Воскресный выстрел в ногу из шаблонов
|
|||
---|---|---|---|
#18+
White OwlИ вообще, шаблоны зло. Да, мы помним. Копипаста добро )) a.guestЕсли это так, то тут UB (начиная с C++17). Ну это хорошо, жалко только что "no diagnostic required", хотя там вполне можно выдавать ошибку, т.к. проверка возможна при компиляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2019, 11:55 |
|
|
start [/forum/topic.php?fid=57&msg=39781575&tid=2017653]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 156ms |
0 / 0 |