Я думаю о перегрузке std::is_pointer
в С++ 11, чтобы получить значение true для std::shared_ptr<T>
, так как последнее ведет себя очень сильно, как T*
.
#include <type_traits>
namespace std {
template <typename T> struct is_pointer<shared_ptr<T>> : std::true_type {};
template <typename T> struct is_pointer<shared_ptr<T const>> : std::true_type {};
}
Интересно, почему эта перегрузка еще не включена в стандартную реализацию. Есть ли какая-то ошибка, которую я не замечаю?
В качестве альтернативы можно было бы, конечно, ввести новый признак is_shared_ptr<T>
.
На самом деле, я попробовал следующий код:
template <typename T>
struct is_pointer<shared_ptr<typename std::remove_cv<T>::type>>
: std::true_type
{};
который не компилируется с помощью GCC 4.7 из-за
error: template parameters not used in partial specialization:
error: ‘T’