LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

Можно выносить специализацию, как-то так можно попробовать:

struct CDestroyer
{
...
    template <typename T>
    struct CHelper4
    {
        template <bool a>
        static void delete_data(T& data)
        {
            CHelper2<T>::delete_data<object_type_traits::is_pointer<T>::value>(data);
        }
    };

    template <typename T> 
    static void delete_data(T& data)
    {
        CHelper4<T>::delete_data<object_type_traits::is_stl_container<T>::value>(data);
    }
};

template <typename T>
template <>
void CDestroyer::CHelper4<T>::delete_data<true>(T& data)
{
    CHelper3::delete_data(data);
}

Исходная версия xaizek, :

Можно выносить специализацию, как-то так можно попробовать:

struct CDestroyer
{
...
    template <typename T>
    struct CHelper4
    {
        template <bool a>
        static void delete_data(T& data)
        {
            CHelper2<T>::delete_data<object_type_traits::is_pointer<T>::value>(data);
        }
    };

    template <typename T> 
    static void delete_data(T& data)
    {
        CHelper4<T>::delete_data<object_type_traits::is_stl_container<T>::value>(data);
    }
};

template <typename T>
template <>
static void CDestroyer::CHelper4<T>::delete_data<true>(T& data)
{
    CHelper3::delete_data(data);
}