icu/icu4c
Fredrik Roubert 3534d337c6 ICU-20973 Rewrite polymorphic CacheKeyBase equality operators for C++20.
The existing polymorphic equality operators that use different types for
the `this` and `other` objects are ambiguous with C++20 resolution rules
that require equality for reversed arguments.

In order to resolve that, while also possibly making the implementation
somewhat simpler overall, the implementation classes (LocaleCacheKey
and DateFmtBestPatternKey) now get normal (non-polymorphic) equality
operators that are trivially non-ambiguous (and as a bonus also don't
need any type casts), while the dynamic type checking logic is moved
into protected helper functions, which in the end are invoked
(without any ambiguity) by friend operators in the base class.

This way, all equality testing of cache key objects ends up taking one
of these two possible paths:

1. Both sides of the equality operator are of the same implementation
   type (ie. LocaleCacheKey or DateFmtBestPatternKey):

   The type specific equality operator is called directly, comparing the
   relevant attributes of the two objects directly.

2. The two sides of the equality operator are either of different types
   or of some base class type:

   The friend equality operators of CacheKeyBase call the virtual helper
   function to figure out whether the two objects are actually of the
   same type and if they are and this type is an implementation type
   then does the necessary type cast to get to 1.
2021-08-26 00:12:04 +02:00
..
as_is ICU-20334 Add python3 support to icu4c scripts 2019-01-17 22:38:18 -08:00
packaging ICU-21580 Fix typos in icu4c/ 2021-07-19 13:22:38 -05:00
source ICU-20973 Rewrite polymorphic CacheKeyBase equality operators for C++20. 2021-08-26 00:12:04 +02:00
APIChangeReport.html ICU-21480 Update ICU4C APIChangeReport files 2021-03-12 10:32:32 -08:00
APIChangeReport.md ICU-21480 Update ICU4C APIChangeReport files 2021-03-12 10:32:32 -08:00
icu4c.css ICU-13581 Update the ICU4C readme sections for building ICU on Windows with Visual Studio. 2018-02-28 03:24:57 +00:00
LICENSE ICU-21580 Fix typos in icu4c/ 2021-07-19 13:22:38 -05:00
license.html
readme.html ICU-21632 Fix links in readme.html files to respective readme pages in User Guide 2021-06-10 09:36:19 -07:00

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
  <head>
    <title>ReadMe for ICU4C</title>
    <meta name="COPYRIGHT" content=
    "Copyright (C) 2016 and later: Unicode, Inc. and others. License &amp; terms of use: http://www.unicode.org/copyright.html"/>
    <!-- meta name="COPYRIGHT" content=
    "Copyright (c) 1997-2016 IBM Corporation and others. All Rights Reserved." / -->
    <meta name="KEYWORDS" content=
    "ICU; International Components for Unicode; ICU4C; what's new; readme; read me; introduction; downloads; downloading; building; installation;" />
    <meta name="DESCRIPTION" content=
    "The introduction to the International Components for Unicode with instructions on building, installation, usage and other information about ICU." />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<link type="text/css" href="./icu4c.css" rel="stylesheet"/>
  </head>


  <body>
    <p>This readme has moved to the <a href="https://unicode-org.github.io/icu/userguide/icu4c/">ICU4C Readme</a>
      section in the <a href="https://unicode-org.github.io/icu/">ICU User Guide</a>.</p>
    <hr />
    <p> Copyright &copy; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
    <a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
    Copyright &copy; 1997-2016 International Business Machines Corporation and  others.
    All Rights Reserved.</p>
  </body>
</html>