1

のビジターを次のように定義することがコンパイラーにとって重要なのはなぜですか。std::tuple

namespace TupleVisit{

        //This function SHOULD BE DEFINED SECONDLY; 
        //IN THIS CONFIGURATION COMPILER DOES NOT 
        //SEE THE BELOW RECURSTION TERMINATION ???
        template<std::size_t Idx = 0,
                 typename Visitor,
                 typename... T,
                 typename std::enable_if< Idx < sizeof...(T) , void *>::type = nullptr
                 >
        static
        void visit(Visitor && v, std::tuple<T...>  & t){
            v( std::get<Idx>(t) );
            TupleVisit::visit<Idx+1, Visitor, T... >(std::forward<Visitor>(v),t);
        }


        template<std::size_t Idx = 0,
                 typename Visitor,
                 typename... T,
                 typename std::enable_if< Idx == sizeof...(T) , void *>::type = nullptr
                  >
        static void
        visit(Visitor && v, std::tuple<T...> & t){}
}

実際の例:コード

複数の enable_if スイッチの一般的なルールは、すべての関数のプロトタイプを作成してから、任意の順序で定義することだと思いますか? その結果、SFINAE で利用可能な正しい関数が常に表示されるようになりますか?

4

1 に答える 1