In the 1.34.1 documentation for optional<T>, in the Synopsis section, it is currently written: -------------------------------------------------------------------------- template<class InPlaceFactory> explicit optional ( InPlaceFactory const& f ) ; template<class TypedInPlaceFactory> explicit optional ( TypedInPlaceFactory const& f ) ; AND template<class InPlaceFactory> optional& operator = ( InPlaceFactory const& f ) ; template<class TypedInPlaceFactory> optional& operator = ( TypedInPlaceFactory const& f ) ; -------------------------------------------------------------------------- Since InPlacefactory and TypedInPlacePlactory are actual classes, these should be: template<InPlaceFactory> explicit optional ( InPlaceFactory const& f ) ; template<TypedInPlaceFactory> explicit optional ( TypedInPlaceFactory const& f ) ; AND template<InPlaceFactory> optional& operator = ( InPlaceFactory const& f ) ; template<TypedInPlaceFactory> optional& operator = ( TypedInPlaceFactory const& f ) ; ------------------------------------------------------------------------- In the Detailed Semantics these are shown correctly.