Is a typedef a definition?
<p>I'm really confused. I am reading TC++PL by Bjarne Stroustrup (special edition, 19th print - Sep 2010). Let me quote a part of the book, highlighting my confusion:</p>

<pre><code>char ch;
string s;
int count = 1;
const double pi = 3.1415926535897932385;
extern int error_number;

const char* name = "Njal";
const char* season[] = { "spring", "summer", "fall", "winter" };

struct Date { int d, m, y; };
int day(Date* p) { return p-&gt;d; }
double sqrt(double);
template&lt;class T&gt; T abs(T a) { return a&lt;0 ? -a : a; }

typedef complex&lt;short&gt; Point;
struct User;
enum Beer { Carlsberg, Tuborg, Thor };
namespace NS { int a; }
</code></pre>

<blockquote>
  <p>As can be seen from these examples, a declaration can do more than simply
  associate a type with a name. Most of these declarations are also definitions;
  that is, they also define an entity for the name to which they refer. For ch,
  that entity is the appropriate amount of memory to be used as a variable – that
  memory will be allocated. For day it is the specified function. For the
  constant pi, it is the value 3.1415926535897932385. For Date, that entity is
  a new type. <strong>For Point it is the type complex so that Point becomes a
  synonym for complex</strong>. Of the declarations above, only these are not also
  definitions:</p>
</blockquote>

<pre><code>double sqrt(double);
extern int error_number;
struct User;
typedef complex&lt;short&gt; Point &lt;-- WTF;
</code></pre>

<p>Isn't the sentence in bold conflicting with the list given below it? Is a typedef just a declaration or also a definition? Is this an error in the book?</p>
