#include <iostream>

template <typename T>
class Test {
public:
    template <typename A> // A == char
    using Wrapper = std::string;

//    template <typename A> // A == char
//    class Wrapper : public std::string
//    {};

    template <template <class> class C>
    void func(const C<T>& t) {
        t;
        return;
    }

    void test()
    {
        std::string sss;
        Wrapper<char> www;
        func((const Wrapper<char>&)sss);
    }
};

int main(int argc, char *argv[])
{
    Test<char> ttt;
    ttt.test();
}
