Я читаю официальные CPPCoreGuidelines, чтобы правильно понимать, когда надежно рассчитывать на RVO, а когда нет. На F20 написано:
Если тип дорогой для перемещения (например, массив), рассмотрите выделяя его в свободном хранилище и возвращая дескриптор (например, unique_ptr) или передать его в ссылку на неконстантный целевой объект для заполнения (для использования в качестве выходного параметра)
Я понимаю, что типы не-STL не оптимизированы для перемещения, но как я могу легко обнаружить другие типы, которые нужно переместить, поэтому я не буду использовать RVO для них?