Boost logo

Boost Users :

Subject: Re: [Boost-users] metaprogramming -- does a specialization exist?
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2010-02-13 14:41:17


AMDG

Peter Foelsche wrote:
> Is there some way to check at compile time whether a particular
> specialization exists?
> E.g. I have a template class with two template arguments which are
> commutative -- means they can be exchanged and the result is the same.
> Can I check whether
>
> type<A, B> exists and if not select type<B, A>?

You can't specializations directly, but if you can change
the primary template you can use:

template<class T, class U>
struct type {
    typedef void this_is_the_primary_definition_of_type;
};

and use SFINAE to check for the typedef. There are other
ways to do this like adding a base class. The key is to add
something whose presence can be detected to the primary
template.

In Christ,
Steven Watanabe


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net