/* std::align_val_t */
#define align_type_node cp_global_trees[CPTI_ALIGN_TYPE]
-/* We cache these tree nodes so as to call get_identifier less
- frequently. */
+/* We cache these tree nodes so as to call get_identifier less frequently.
+ For identifiers for functions, including special member functions such
+ as ctors and assignment operators, the nodes can be used (among other
+ things) to iterate over their overloads defined by/for a type. For
+ example:
+
+ tree ovlid = cp_assignment_operator_id (NOP_EXPR);
+ tree overloads = lookup_fnfields_slot (type, ovlid);
+ for (ovl_iterator it (overloads); it; ++it) { ... }
+
+ iterates over the set of implicitly and explicitly defined overloads
+ of the assignment operator for type (including the copy and move
+ assignment operators, whether deleted or not). */
/* The name of a constructor that takes an in-charge parameter to
decide whether or not to construct virtual base classes. */
/* The name of a destructor that destroys virtual base classes, and
then deletes the entire object. */
#define deleting_dtor_identifier cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER]
+
+/* The name of the identifier used internally to represent operator CODE. */
+#define cp_operator_id(CODE) \
+ (operator_name_info[(int) (CODE)].identifier)
+
+/* The name of the identifier used to represent assignment operator CODE,
+ both simple (i.e., operator= with CODE == NOP_EXPR) and compound (e.g.,
+ operator+= with CODE == PLUS_EXPR). Includes copy and move assignment.
+ Use copy_fn_p() to test specifically for copy assignment. */
+#define cp_assignment_operator_id(CODE) \
+ (assignment_operator_name_info[(int) (CODE)].identifier)
+
#define delta_identifier cp_global_trees[CPTI_DELTA_IDENTIFIER]
#define in_charge_identifier cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER]
/* The name of the parameter that contains a pointer to the VTT to use
#define current_function_auto_return_pattern \
(cp_function_chain->x_auto_return_pattern)
-#define cp_operator_id(CODE) \
- (operator_name_info[(int) (CODE)].identifier)
-#define cp_assignment_operator_id(CODE) \
- (assignment_operator_name_info[(int) (CODE)].identifier)
-
/* In parser.c. */
extern tree cp_literal_operator_id (const char *);