0

私は単純な C++ 11 コードをコンパイルしようとします(主vs2010 をターゲットにし、vs 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で不可能な場合は?

4

1 に答える 1

4

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-cc-11-and-the-future-of-c.aspx

CTPを使用する場合は、VS 2012 の Variadic テンプレート (Visual C++ 2012 年 11 月 CTP)も参照してください。

于 2012-12-14T09:10:14.250 に答える