Q:

C++ - How to typdef templated struct pointer?

Here is my code:
#include<iostream>
using namespace std;

template<typename T>
struct Doublenode{
    T data;
    struct Doublenode<T>* prev;
    struct Doublenode<T>* next;
};
template<typename T>
using Double_node = typename Doublenode <T>::Double_node;
template<typename T>
using DoubleNodePtr = typename Double_node <T>* ::DoubleNodePtr;

This gives me the folowing error:

error: expected nested-name-specifier
   using DoubleNodePtr = typename (^)Double_node * ::DoubleNodePtr;

What is the right way to typdef a templated struct pointer?

A:

The syntax of a using type alias, be it templated or not, is as follows:
using <alias name> = <existing type name>;

You are writing it as 
using <alias name> = <existing type name> :: <alias name>;

It could work if <existing type name> has a member type named like <alias name>. But it's not correct in general. You problem, ultimately, seems to be about misunderstanding the required syntax. Which when applied to your post is simply:
template<typename T>
using Double_node = Doublenode<T>;

