Некоторые подводные камни при использовании decltype в C++:
- Невозможность определить тип перегружённой функции. stackoverflow.com Это происходит, потому что decltype не может понять, тип какой функции нужно вывести. stackoverflow.com
- Неправильное поведение кода при использовании decltype без суммы. www.cyberforum.ru Если за результат функции взять тип, который меньше, чем у параметра, то при определённых значениях результат исказится. www.cyberforum.ru
- Потенциальные ошибки при использовании операций приведения. www.linux.org.ru Если переменные имеют другой тип, то они будут приведены к указанному в скобках, и не будет ошибки компиляции. www.linux.org.ru
Чтобы избежать этих подводных камней, рекомендуется использовать decltype(auto), который позволяет вывести такой же тип, как у присваиваемого выражения, при этом ссылочность и квалификаторы будут сохранены. habr.com