text: @import templates_top;
  
  template<typename T> class Vector { 
  public:
    void push_back(const T&);
  };
  
  template<typename T> class List;
  template<> class List<bool> {
  public:
    void push_back(int);
  };
  
  namespace N {
    template<typename T> class Set {
    public:
      void insert(T);
    };
  }
  
  constexpr unsigned List<int>::*size_right = &List<int>::size;
  List<int> list_right = { 0, 12 };
  typedef List<int> ListInt_right;
  
  template <typename T>
  void pendingInstantiationEmit(T) {}
  void triggerPendingInstantiationToo() {
    pendingInstantiationEmit(12);
  }
  
  void redeclDefinitionEmit(){}
  
  typedef Outer<int>::Inner OuterIntInner_right;
  
  int defineListDoubleRight() {
    List<double> ld;
    ld.push_back(0.0);
    return ld.size;
  }
  
  inline void defineListLongRight() {
    List<long> ll;
  }
  
  template<typename T> struct MergePatternDecl;
  
  void outOfLineInlineUseRightF(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::f);
  void outOfLineInlineUseRightG(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::g);
  void outOfLineInlineUseRightH(void (OutOfLineInline<int>::*)() = &OutOfLineInline<int>::h);
  
  inline int *getStaticDataMemberRight() {
    return WithUndefinedStaticDataMember<int[]>::undefined;
  }
  
  inline WithAttributes<int> make_with_attributes_right() { return WithAttributes<int>(); }
  