Lazy evaluation
How can I lazy evaluate second arg in std::conditional?  

    #include "stdafx.h"
    #include <type_traits>
    
    struct Null{};
    struct _1{enum {one = true,two = false};};
    struct _2{enum {two = true, one = false};};
    
    template<class T>
    struct is_nulltype
    {
    	enum {value = false};
    };
    
    template<>
    struct is_nulltype<Null>
    {
    	enum {value = true};
    };
    
    template<class T>
    struct X : std::conditional<is_nulltype<T>::value,Null,typename std::conditional<T::one,_1,_2>::type>::type
    {
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    X<Null> x;//won't compile no Null::one but I don't need that member in Null at all
    	return 0;
    }
Lazy evaluation
===

How can I lazy evaluate second arg in std::conditional?  

    #include "stdafx.h"
    #include <type_traits>
    
    struct Null{};
    struct _1{enum {one = true,two = false};};
    struct _2{enum {two = true, one = false};};
    
    template<class T>
    struct is_nulltype
    {
    	enum {value = false};
    };
    
    template<>
    struct is_nulltype<Null>
    {
    	enum {value = true};
    };
    
    template<class T>
    struct X : std::conditional<is_nulltype<T>::value,Null,typename std::conditional<T::one,_1,_2>::type>::type
    {
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    X<Null> x;//won't compile no Null::one but I don't need that member in Null at all
    	return 0;
    }