/* namespace My { class Description {}; class WaterTable {}; class GPM {}; class IsRunning {}; } typedef CSV::Entry< My::Description, std::string, CSV::Entry< My::WaterTable, int, CSV::Entry< My::GPM, float, CSV::Entry< My::IsRunning, bool, CSV::eol> > > > My_CSVType; if(!CSV::Field::IsNull(tt)) { std::string test = CSV::Field::Data(tt); std::cout << test << std::endl; } else { std::cout << "NULL" << std::endl; } .\Visual Studio Projects\csvtest\csvtest.cpp(77) : error C2440: 'initializing' : cannot convert from 'int' to 'std::basic_string<_Elem,_Traits,_Ax>' with [ _Elem=char, _Traits=std::char_traits, _Ax=std::allocator ] No constructor could take the source type, or constructor overload resolution was ambiguous */ /// /// CSVField /// template< typename T1 > struct is_same_part_1 { template struct part_2 { enum { value = false }; }; template<> struct part_2 { enum { value = true }; }; }; template< typename T1, typename T2 > struct is_same_impl { enum { value = is_same_part_1::template part_2::value }; }; template < typename TypeList, typename FIELD, bool isField = is_same_impl::value > struct Field { static /*unspecified*/ Data(TypeList& tt); static bool IsNull(TypeList& tt); }; template < typename TypeList, typename FIELD > struct Field { static /*unspecified*/ Data(TypeList& tt) { return Field::Data(tt.Next); } static bool IsNull(TypeList& tt) { return Field::IsNull(tt.Next); } }; template < typename TypeList, typename FIELD > struct Field { static /*unspecified*/ Data(TypeList& tt) { return tt.Data; } static bool IsNull(TypeList& tt) { return tt.IsNull; } }; /// /// CSVField_n /// template < typename TypeList, unsigned FIELD > struct Field_n { static /*unspecified*/ Data(TypeList& tt) { return Field_n::Data(tt.Next); } static bool IsNull(TypeList& tt) { return Field_n::IsNull(tt.Next); } }; template< typename TypeList > struct Field_n { static /*unspecified*/ Data(TypeList& tt) { return tt.Data; } static bool IsNull(TypeList& tt) { return tt.IsNull; } };