It's a cv-qualifier. Other possibilities are "volatile" and "const
volatile".
And, as of C++11, the cv-qualifiers can be followed by ref-qualifiers,
"&" and "&&".
Which serve a similar purpose, in restricting use of the methods.
C++11 §5.5/6
"In a .* expression whose object expression is an rvalue, the program is
ill-formed if the second operand is a pointer to member function with
ref-qualifier &. In a .* expression whose object expression is an
lvalue, the program is ill-formed if the second operand is a pointer to
member function with ref-qualifier &&."
C++11 §13.3.1/4
"For non-static member functions, the type of the implicit object
parameter is
— “lvalue reference to cv X†for functions declared without a
ref-qualifier or with the & ref-qualifier
— “rvalue reference to cv X†for functions declared with the &&
ref-qualifier"
C++11 §13.3.1/5
"For non-static member functions declared without a ref-qualifier, an
additional rule applies:
— even if the implicit object parameter is not const-qualified, an
rvalue can be bound to the parameter as long as in all other respects
the argument can be converted to the type of the implicit object parameter."
Essentially, the last para means that the ordinary
freely-call-methods-on-temporaries rule is disabled for methods with
ref-qualifiers. The two first paras then mean that a "&" method can only
be called on an rvalue, and that a "&&" method can only be called on an
lvalue. Keeping in mind that rvalue and lvalue refer to expressions, not
objects, and also modulo the more precise C++11 terminology which I
don't master yet.
Cheers,
- Alf