Я пытаюсь скомпилировать простой код C ++ 11 (Я примараю цель против 2010 года, а также как вторичный вариант против 2012 года) они говорят он должен скомпилировать и компилируется на некоторых современных компиляторах
И поэтому мне интересно, как скомпилировать код, содержащий такие структуры, как:
struct C {
A *_first__;
B *_second__;
C(A * _first__, B * _second__):_first__(_first__), _second__(_second__) {
} template < typename K, typename ... T > static auto _a_caller__(K * k, T && ... args)->decltype(k->a(std::forward < T > (args) ...)) {
return k->a(std::forward < T > (args)...);
}
template < typename...T > auto a(T &&...args)->decltype(_a_caller__(_first__, std::forward < T > (args)...)) {
return _a_caller__(_first__, std::forward < T > (args)...);
}
template < typename...T > auto a(T &&...args)->decltype(_a_caller__(_second__, std::forward < T > (args)...)) {
return _a_caller__(_second__, std::forward < T > (args)...);
}
template < typename K, typename...T > static auto _b_caller__(K * k, T && ... args)->decltype(k->b(std::forward < T > (args) ...)) {
return k->b(std::forward < T > (args)...);
}
template < typename...T > auto b(T &&...args)->decltype(_b_caller__(_first__, std::forward < T > (args)...)) {
return _b_caller__(_first__, std::forward < T > (args)...);
}
template < typename...T > auto b(T &&...args)->decltype(_b_caller__(_second__, std::forward < T > (args)...)) {
return _b_caller__(_second__, std::forward < T > (args)...);
}
};
В vs 2010, а если нет, то в vs2012?
Шаблоны Variadic не поддерживаются ни в VS2010, ни в VS2012: http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx
Они поддерживаются в VS2012 CTP, хотя: http://blogs.msdn.com/b/vcblog/archive/2012/11/02/visual-c-c-11-and-the-future-of-c.aspx
Также см Шаблон Variadic в VS 2012 (Visual C ++ Ноябрь 2012 CTP) если вы собираетесь использовать CTP.
Других решений пока нет …