C++ 11嵌套std :: conditional

tow*_*120 4 c++ type-traits c++11

这个表达怎么了?

template<class T, class FieldT>
using addRefU = typename std::conditional<
                            // ok when true. When false result has no reference at all
                            false,     
                            typename std::add_rvalue_reference< FieldT >::type,
                            typename std::conditional<
                                true,
                                typename std::add_rvalue_reference< FieldT >::type,
                                typename std::add_lvalue_reference< FieldT >::type
                            >
                        >::type;

int main()
{
        std::cout << std::is_rvalue_reference<
            addRefU<A, B>
        >::value << std::endl;
        std::cout << std::is_lvalue_reference<
            addRefU<A, B>
        >::value << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

http://coliru.stacked-crooked.com/a/21593805f2c6e634

结果,它根本没有参考.嵌套的std :: conditional是不允许的?

Rei*_*ica 6

::type在嵌套上忘了一个conditional:

template<class T, class FieldT>
using addRefU = typename std::conditional<
                            // ok when true. When false result has no reference at all
                            false,     
                            typename std::add_rvalue_reference< FieldT >::type,
                            typename std::conditional<
                                true,
                                typename std::add_rvalue_reference< FieldT >::type,
                                typename std::add_lvalue_reference< FieldT >::type
                            >::type
                        >::type;

int main()
{
        std::cout << std::is_rvalue_reference<
            addRefU<A, B>
        >::value << std::endl;
        std::cout << std::is_lvalue_reference<
            addRefU<A, B>
        >::value << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

住在Coliru