
Christoph, Just a guess since I don't have access to that compiler, but keep in mind that std::vector has two parameters -- they type T and an allocator (defaults to std::allocator<T>). Try adding that to the partial specialization: template<class T, class A> struct is_contingous_in_memory< typename std::vector<T, A>::iterator > : boost::mpl::true_ {}; HTH, Nate On Mon, Aug 15, 2011 at 4:13 AM, Christoph Heindl <christoph.heindl@gmail.com> wrote:
I tried to roll my own solution but I'm failing to see how to enable the specialization for certain iterator types. What I have done is to create a generic metafunction that applies unless a specialization is found
template<class Iterator> struct is_contingous_in_memory : boost::mpl::false_ {};
Now, when dealing with std::vector<int> I can declare
template<> struct is_contingous_in_memory<std::vector<int>::iterator> : boost::mpl::true_ {}; template<> struct is_contingous_in_memory<std::vector<int>::iterator> : boost::mpl::true_ {};
That way I would need to declare several variants for all integral and floating point types. So I thought, that I could write
template<class T> struct is_contingous_in_memory< typename std::vector<T>::iterator > : boost::mpl::true_ {};
but that fails to compile with "template parameter not used or deducible in partial specialization 'specialization'". How to deal with that (on MSVC 9)?
Best regards, Christoph _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users