Я реализовал смарт-указатель, который хранит объект типа T с функцией прокси, который вызывает методы внутреннего объекта в:Как использовать noexcept оператор правильно
template <class Function, class ...Args, class ...Params>
inline bool call(Function (T::*function)(Args...) const, Params&& ...args) const noexcept(noexcept(function));
Но я нашел странную проблему - когда std :: exception генерируется в функции-члене, программа завершается, даже если функция прокси вызывается внутри блока try. Поэтому мой вопрос: правильно ли использовать оператор noexcept, а если нет, как его использовать в этом случае?
Что не так с умными указателями уже в C++ 11 и/или 'std :: function'? –
Он использует копию для записи в некоторых особых случаях. И он делает все обращения к сохраненному объекту потоком безопасным. –
См. [Здесь] (http://en.cppreference.com/w/cpp/language/noexcept_spec), в частности «Если функция, помеченная' noexcept', позволяет избежать неперехваченного исключения во время выполнения, 'std :: terminate' является вызванный немедленно ». – juanchopanza