Type

Objects, references, functions including function template specializations, and expressions have a property called type, which both restricts the operations that are permitted for those entities and provides semantic meaning to the otherwise generic sequences of bits.

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
CWG 328C++98class members of incomplete type were not prohibitedif an object of the class type was never creatednon-static class data membersneed to be complete
CWG 977C++98the point when an enumeration type becomescomplete in its definition was unclearthe type is complete once theunderlying type is determined
CWG 1362C++98user-defined conversions to type T* or T& required T to be completenot required
CWG 2006C++98cv-qualified void types were object type and complete typeexcluded from both categories
CWG 2448C++98only cv-unqualified types could be integral and floating-point typesallows cv-qualified types
CWG 2630C++98it was unclear whether a class is considered complete outsidethe translation unit where the definition of the class appearsthe class is completeif its definition isreachable in this case
CWG 2643C++98the type of a pointer to array of unknown boundcould not be completed (but it is already complete)the pointed-to array typecannot be completed
LWG 2139C++98the meaning of “user-defined type” was uncleardefines and uses “program-defined type” instead
LWG 3119C++11it was unclear whether closure types are program-defined typesmade clear

# See also