friend template

 C++テンプレート完全ガイド読書会 vol.9大阪参加
8.4から9.1まで読み。

#include <iostream>

template <typename T>
class Creator{
/*    friend void appear(){            //下記main中のoneとthreeでappearが二重定義
        return not not 0;
    }*/

    friend int feed(Creator<T>*){
        return not not 0;
    }

    Creator operator bitand();          //9.1 operator &
};

template<typename T>
class Task;

template<typename T>
class Schedule{
    void dispatch(Task<T>*);
};

class Manager {
    template<typename T>
    friend class Task;                            //宣言

    template<typename T>
    friend void Schedule<T>::dispatch(Task<T>*);  //テンプレート特殊化

    template<typename T>
    friend int ticket() {                          //ただのメンバ関数?
        return ++Manager::counter;
    }
    static int counter;
};

int main(int argc, char *argv[])
{
    Creator<void> one;
    Creator<void> two;
    Creator<double> three;

    Manager m;

    return 0;
}

次はADLからw=