#include<list>


enum Bool { False, True };


template<Bool> struct isSingleton_;
template<Bool b> using isSingleton = typename isSingleton_<b>::type;
template<> struct isSingleton_<False> { using type = int; };
template<> struct isSingleton_<True>  { using type = std::list<int>; };


template<Bool> struct mkSingle_;
template<Bool b> auto mkSingle = mkSingle_<b>::value;
template<> struct mkSingle_<False> { static const isSingleton<False> value = 0; };
template<> struct mkSingle_<True>  { static const isSingleton<True>  value; }; 
const isSingleton<True> mkSingle_<True>::value = {};


int main() 
{
    auto i = mkSingle<False>;
    auto l = mkSingle<True>;
    
    return i;
}