Boost logo

Boost Users :

Subject: Re: [Boost-users] [ConceptCheck] Same type concept
From: Robert Ramey (ramey_at_[hidden])
Date: 2014-08-25 12:18:08


the obvious thing you're missing is that a "Concept" is just a glorified name
for some static asserts.

So you can get what you want by using

template<typename T, typename U>
struct my_class {
    static_assert(std::is_same<T, U>::value, "Types differ!");
    ....
};

template<typename T, typename U>
int x(T &t; U& u){
    static_assert(std::is_same<T, U>::value, "Types differ!");
    ... code here
}

If you want to make an "official looking" concept you can
look at boost concept library which describes how to do this. The
short version is

template<typename T, typename U>
struct MyConcept {
    static_assert(std::is_same<T, U>::value, "Types differ!");
    ... all the other type requirements
};

Then you could change my class to look like

template<typename T, typename U>
struct my_class : public MyConcept<T, U> {
    ....
};

template<typename T, typename U>
int x(T &t; U& u){
    typedef MyConcept<T, U> concept_check;
    ... code here
}

Take a look at the Boost concept library which explains all this better.

Robert Ramey

--
View this message in context: http://boost.2283326.n4.nabble.com/ConceptCheck-Same-type-concept-tp4666862p4666900.html
Sent from the Boost - Users mailing list archive at Nabble.com.

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