| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 |  
/* !!! C++11 inside !!! */
struct EntityTag{};
struct ValueTag{};
 
struct OthelloTag{
    using gameTag = ValueTag;
};
struct ChessTag{
    using gameTag = EntityTag;
};
template <typename BoardType>
class Board{
    public:
        using boardTag = BoardType::gameTag;
        template <typename T = boardTag,
                        typename = typename
                        <std::enable_if<std::is_same<T,ValueTag>::value>::type>
        void foo(T const & /* , ... */ ){
 
        }
        template <typename T = boardTag,
                        typename = typename
                        <std::enable_if<std::is_same<T,EntityTag>::value>::type>
        void foo(T const & /* , ... */ ){
 
        }
       /* ... */
} | 
Partager