回答編集履歴
1
特殊化する場合の例を追加
    
        answer	
    CHANGED
    
    | @@ -13,4 +13,26 @@ | |
| 13 13 | 
             
                A(T a):a{a}{}
         | 
| 14 14 | 
             
                void f(A<T*> p){a=*p.a;}
         | 
| 15 15 | 
             
            };
         | 
| 16 | 
            +
            ```
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            特殊化するのであれば `friend` 宣言は `A<T*>` の方にすればよいですね。
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            ```
         | 
| 21 | 
            +
            #include <type_traits>
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            template<typename T>
         | 
| 24 | 
            +
            class A{
         | 
| 25 | 
            +
                T a;
         | 
| 26 | 
            +
            public:
         | 
| 27 | 
            +
                A(T a):a{a}{}
         | 
| 28 | 
            +
                void f(A<T*> p){a=*p.a;}
         | 
| 29 | 
            +
            };
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            template<typename T>
         | 
| 32 | 
            +
            class A<T*> {
         | 
| 33 | 
            +
                friend class A<T>;
         | 
| 34 | 
            +
                T* a;
         | 
| 35 | 
            +
            public:
         | 
| 36 | 
            +
                A(T* a):a{a}{}
         | 
| 37 | 
            +
            };
         | 
| 16 38 | 
             
            ```
         | 
