Почему прямое объявление класса, который будет typedef, не разрешено?

Если я хочу использовать указатель на класс и не выполняю с ним никаких операций, мы можем пересылать объявление класса. Но если это typedef, почему это не разрешено? В следующем примере он компилирует только я включаю закомментированный код, но почему компилятор хочет знать об этом в этот момент? Как пересылать объявление чего-либо, что может быть typedef. Есть ли какие-либо изменения в этом поведении в c ++ 0x?

#include <iostream>
using namespace std;
/*
template<class T>
class temp;

typedef temp<int> later;
*/
class later;
void somefunc(later*);
int main()
{
  later* l;
  somefunc(l);
  return 0;
}
//The following is in someother file/compilation unit.
template<class T>
struct temp
{
  public:
    void print()
    {
        T t(5);
        std::cout<< "helloworld: " << t << std::endl;
    }
};
typedef temp<int> later;
void somefunc(later* l)
{
  l = new later();
  l->print();
}
8
задан balki 22 June 2011 в 10:09
поделиться