Actually both - "Pointers are FCO" and "Pointers are not FCO" - are correct. We need to take the statements in the respective context. (FCO - First Class Object)
When we talk of a 'pointer' in C++, we are talking of a data type that stores the address of some other data. Now whether this is FCO or not, depends really on how we envisage to use it. Unfortunately, this use semantics is not built-in for Pointers in C++.
If we are using pointers merely to 'point' to data, it will satisfy the requirements of being an FCO. However, if we use a pointer to 'hold' a data, then it can no longer be considered an FCO as its copy and assignment semantics do not work. Such 'resource handling' pointers (or more directly referred as 'raw pointers') are our interest in the context of Smart Pointer study. These are not FCO while the corresponding Smart Pointers are. In contrast, mere tracking pointers would continue to meet the requirements for an FCO.
The following paragraph from "Modern C++ Design" book nicely elucidates the point.
I quote from the Chapter on Smart Pointers:
An object with value semantics is an
object that you can copy and assign
to. Type int is the perfect example of
a first-class object. You can create,
copy, and change integer values
freely. A pointer that you use to
iterate in a buffer also has value
semantics—you initialize it to point
to the beginning of the buffer, and
you bump it until you reach the end.
Along the way, you can copy its value
to other variables to hold temporary
results.
With pointers that hold values
allocated with new, however, the story
is very different. Once you have
written
Widget* p = new Widget;
the variable p not only points to, but also owns, the memory
allocated for the Widget object. This
is because later you must issue delete
p to ensure that the Widget object is
destroyed and its memory is released.
If in the line after the line just
shown you write
p = 0; // assign something else to p
you lose ownership of the object previously pointed to by p, and you
have no chance at all to get a grip on
it again. You have a resource leak,
and resource leaks never help.
I hope this clarifies.