#include <algorithm>
#include <iostream>

template < class T, class U, class V >
struct str
{
    T t;
    U u;
    V v;
};

template < class T, class U >
using str2 = str < T, int, U >;

template < class T >
void foo(T t)
{
    std::cout << t.t << " " << t.u << " " << t.v << "\n";
}


int main()
{
    str<int,char,const char*> s1 = {34, 'c', "string"};
    str2<float,char> s2 = {6.9f, 13, 'P'};
    
    foo(s1);
    foo(s2);
    
    return 0;
}