Skip to content

libicui18n fails to compile on Windows with MSVC 19.36.32502 due to P2468R2 #1

@wroyca

Description

@wroyca

The meaning of == and != expressions has been altered in C++20 with the proposals P1185R2 and P2468R2, along with changes to how overload resolution is applied to them, resulting in previously valid code becoming invalid. As a result, ICU now produces error C2666 on certain overloaded functions and operators. Due to certain packages such as Qt being dependent on ICU, it also becomes infeasible to compile them.

    https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2468r2.html

b
c++ ..\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\cxx{fmtable} -> ..\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\objs{fmtable}
c++ ..\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\cxx{fmtable} -> ..\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\obja{fmtable}
C:\Users\wroy\Desktop\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\fmtable.cpp(59): error C2666: 'icu_65::Measure::operator ==': overloaded functions have similar conversions
C:\Users\wroy\Desktop\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\unicode/measure.h(90): note: could be 'UBool icu_65::Measure::operator ==(const icu_65::UObject &) const'
C:\Users\wroy\Desktop\echo-msvc\libicuuc-65.1.0+6\libicu/uc\unicode/stringpiece.h(242): note: or       'UBool icu_65::operator ==(const icu_65::StringPiece &,const icu_65::StringPiece &)'
C:\Users\wroy\Desktop\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\unicode/measure.h(90): note: or 'UBool icu_65::Measure::operator ==(const icu_65::UObject &) const' [synthesized expression 'y == x']
C:\Users\wroy\Desktop\echo-msvc\libicuuc-65.1.0+6\libicu/uc\unicode/stringpiece.h(242): note: or 'UBool icu_65::operator ==(const icu_65::StringPiece &,const icu_65::StringPiece &)' [synthesized expression 'y == x']
C:\Users\wroy\Desktop\echo-msvc\libicui18n-65.1.0+6\libicui18n\i18n\fmtable.cpp(59): note: while trying to match the argument list '(const icu_65::Measure, const icu_65::Measure)'
error: process cl exited with code 2

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions