Некоторые подводные камни при использовании decltype в C++:
- Невозможность определить тип перегружённой функции. 2 Это происходит, потому что decltype не может понять, тип какой функции нужно вывести. 2
- Неправильное поведение кода при использовании decltype без суммы. 4 Если за результат функции взять тип, который меньше, чем у параметра, то при определённых значениях результат исказится. 4
- Потенциальные ошибки при использовании операций приведения. 5 Если переменные имеют другой тип, то они будут приведены к указанному в скобках, и не будет ошибки компиляции. 5
Чтобы избежать этих подводных камней, рекомендуется использовать decltype(auto), который позволяет вывести такой же тип, как у присваиваемого выражения, при этом ссылочность и квалификаторы будут сохранены. 1