1*99451b44SJordan Rupprecht //===-- main.cpp ------------------------------------------------*- C++ -*-===// 2*99451b44SJordan Rupprecht // 3*99451b44SJordan Rupprecht // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*99451b44SJordan Rupprecht // See https://llvm.org/LICENSE.txt for license information. 5*99451b44SJordan Rupprecht // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*99451b44SJordan Rupprecht // 7*99451b44SJordan Rupprecht //===----------------------------------------------------------------------===// 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprecht #include <stdio.h> 10*99451b44SJordan Rupprecht 11*99451b44SJordan Rupprecht template <class T> class A 12*99451b44SJordan Rupprecht { 13*99451b44SJordan Rupprecht public: 14*99451b44SJordan Rupprecht void accessMember(T a); 15*99451b44SJordan Rupprecht T accessMemberConst() const; 16*99451b44SJordan Rupprecht static int accessStaticMember(); 17*99451b44SJordan Rupprecht 18*99451b44SJordan Rupprecht void accessMemberInline(T a) __attribute__ ((always_inline)) 19*99451b44SJordan Rupprecht { 20*99451b44SJordan Rupprecht m_a = a; // breakpoint 4 21*99451b44SJordan Rupprecht } 22*99451b44SJordan Rupprecht 23*99451b44SJordan Rupprecht T m_a; 24*99451b44SJordan Rupprecht static int s_a; 25*99451b44SJordan Rupprecht }; 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht template <class T> int A<T>::s_a = 5; 28*99451b44SJordan Rupprecht 29*99451b44SJordan Rupprecht template <class T> void A<T>::accessMember(T a) 30*99451b44SJordan Rupprecht { 31*99451b44SJordan Rupprecht m_a = a; // breakpoint 1 32*99451b44SJordan Rupprecht } 33*99451b44SJordan Rupprecht 34*99451b44SJordan Rupprecht template <class T> T A<T>::accessMemberConst() const 35*99451b44SJordan Rupprecht { 36*99451b44SJordan Rupprecht return m_a; // breakpoint 2 37*99451b44SJordan Rupprecht } 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht template <class T> int A<T>::accessStaticMember() 40*99451b44SJordan Rupprecht { 41*99451b44SJordan Rupprecht return s_a; // breakpoint 3 42*99451b44SJordan Rupprecht } 43*99451b44SJordan Rupprecht 44*99451b44SJordan Rupprecht int main() 45*99451b44SJordan Rupprecht { 46*99451b44SJordan Rupprecht A<int> my_a; 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht my_a.accessMember(3); 49*99451b44SJordan Rupprecht my_a.accessMemberConst(); 50*99451b44SJordan Rupprecht A<int>::accessStaticMember(); 51*99451b44SJordan Rupprecht my_a.accessMemberInline(5); 52*99451b44SJordan Rupprecht } 53