#include <iostream>

#include <string>

#include <type_traits>



struct B { B() {} B(int) {} };

struct C {};



struct A : B, C

{

public:

    template <

        class T,

        class =

            typename std::enable_if<

                std::is_convertible<T, B>::value, T>::type> 

    A(T&& t)

    {

        std::cout << "A(T&&)\n";

    }



    template <class... TArgs>

    A(TArgs&&... targs)

    {

        std::cout << "A(TArgs&&)\n";

    }

};



int main()

{

    B b;



    A a1(b);

    A a2(4);

    A a3("hello");



    return 0;

}



