利用用途があるかどうかはともかく…
tuple<char, tuple<short, long>> val;
auto elem = get<1>(val);
このコードはgccでもVCでも問題なくコンパイルできます。
但し、
struct A{};
struct B{};
struct C{};
//…
tuple<A,tuple<B,C>>val;
auto elem = get<1>(val);
このコードはVCだと通りますが、gccだとエラーになります。
コードが悪いのか、gccが悪いのか、はたまたVCが悪いのか。