https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92279
--- Comment #5 from Martin Liška <marxin at gcc dot gnu.org> --- > > context <record_type 0x7ffff76750a8 btConvexHullInternal> > ... > > context <record_type 0x7ffff7675738 btConvexHullInternal>> > > But whoever built the constructor with two differnt types did someting > wrong. > I've probably got it: $ $14 = void (gdb) p debug_tree(lhs_type->type_common.context) <record_type 0x7ffff76750a8 btConvexHullInternal cxx-odr-p DI size <integer_cst 0x7ffff7864ba0 type <integer_type 0x7ffff78790a8 bitsizetype> constant 64> unit-size <integer_cst 0x7ffff7864bb8 type <integer_type 0x7ffff7879000 sizetype> constant 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ffff76750a8 fields <field_decl 0x7ffff7673ed8 vertexList type <pointer_type 0x7ffff7675150 type <record_type 0x7ffff76751f8 Vertex> unsigned DI size <integer_cst 0x7ffff7864ba0 64> unit-size <integer_cst 0x7ffff7864bb8 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality pointer_to_this <pointer_type 0x7ffff76867e0> reference_to_this <reference_type 0x7ffff7688f18>> unsigned nonlocal DI ice9.ii:177:10 size <integer_cst 0x7ffff7864ba0 64> unit-size <integer_cst 0x7ffff7864bb8 8> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7864bd0 constant 0> bit-offset <integer_cst 0x7ffff7864c18 constant 0> context <record_type 0x7ffff76750a8 btConvexHullInternal>> context <namespace_decl 0x7ffff7667130 VHACD> pointer_to_this <pointer_type 0x7ffff76a55e8>> $ $13 = void (gdb) p debug_tree(rhs1_type->type_common.context) <record_type 0x7ffff7675738 btConvexHullInternal cxx-odr-p DI size <integer_cst 0x7ffff7864ba0 type <integer_type 0x7ffff78790a8 bitsizetype> constant 64> unit-size <integer_cst 0x7ffff7864bb8 type <integer_type 0x7ffff7879000 sizetype> constant 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ffff7675738 fields <field_decl 0x7ffff76761c8 vertexList type <pointer_type 0x7ffff76757e0 type <record_type 0x7ffff7675888 Vertex> unsigned DI size <integer_cst 0x7ffff7864ba0 64> unit-size <integer_cst 0x7ffff7864bb8 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality> unsigned nonlocal DI ice5.ii:375:10 size <integer_cst 0x7ffff7864ba0 64> unit-size <integer_cst 0x7ffff7864bb8 8> align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst 0x7ffff7864bd0 constant 0> bit-offset <integer_cst 0x7ffff7864c18 constant 0> context <record_type 0x7ffff7675738 btConvexHullInternal>> context <translation_unit_decl 0x7ffff786e2d0 ice5.ii>> So one btConvexHullInternal type lives in a namespace VHACD and second one in any. So the types have different ODR names..