This is section 3.9.3 CV qualifiers from C ++ 11 draft n3290:
The type referred to in paragraphs 3.9.1 and 3.9.2 is categorically unqualified. Each type, which is a cv-unqualified complete or incomplete object type or is invalid (3.9), has three corresponding versions of the cv-qualification of its type : a version with a configuration-independent version, a version with variable qualifications and a version with stable volatility. The term type (1.8) object includes the cv qualifiers specified when creating the object. The presence of the const qualifier in the declaration-specifier-seq declares an object of the type of the object corresponding to const; such an object is called a const object. The presence of a volatile qualifier in the qualifier declaration-seq declares an object of the type of a volatile-qualified object; such an object is called a mutable object. The presence of both cv-qualifiers in decl-specifier-seq declares an object type object with stable power consumption; such an object is called a const volatile object. Skilled or cv-unskilled type versions are different types; however, they must have the same understanding and alignment requirements (3.9) .51
So const and volatile can be used in the same places, possibly in conjunction.
In paragraph 3 of this section, there is a slight difference in how they apply to class objects:
Each non-static, non-volatile, non-referenced data element of an object with a const-const class is const-qualified, each non-static, non-referenced data element of an object with a variable class is unstable and is similar for members of an unstable class. See 8.3.5 and 9.3.2 for types of functions that have CV classifiers.
but this is pretty logical.
volatile -qualified objects have more stringent requirements for the as-if rule, namely:
Access to unstable objects is evaluated strictly in accordance with the rules of an abstract machine.
Volatility is attached to an object in the same way const does:
dummy_class volatile*
For non-static member functions (Β§9.3.1):
A non-static member function can be declared const, volatile or const volatile. These cv qualifiers affect the type of this pointer (9.3.2). They also affect the type of function (8.3.5) of a member function; a member function declared const is a constant member function, a member function declared volatile is a volatile member function and a member function declared volatile is a constant mutable function member.
Thus, volatility, such as const-ness, is applied to the this type inside the function.
None of const and volatile can be applied to static member functions.