https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116838

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jamaika from comment #2)
> I don't know who's to blame.

If you enable C++20 (or C++23) and GCC tells you that your code is not
compatible with C++20, fix the code.

(In reply to Jamaika from comment #0)
> Codec vvenc
> ```
> In file included from MCTF.cpp:52:
> ../Utilities/NoMallocThreadPool.h: In lambda function:
> ../Utilities/NoMallocThreadPool.h:160:31: warning: implicit capture of
> 'this' via '[=]' is deprecated in C++20 [-Wdeprecated]
>   160 |     nonconst->m_cond.wait( l, [=] { return
> !m_intBarrier.isBlocked(); } );
>       |                               ^
> ../Utilities/NoMallocThreadPool.h:160:31: note: add explicit 'this' or
> '*this' capture
> ```

This is a language change in C++20. If you want to compile the code as C++20 or
C++23, then the code needs to be fixed. This is not a GCC bug.

> codec fdk-aac
> ```
> ps_encode.cpp: In function 'FDK_PSENC_ERROR
> FDKsbrEnc_PSEncode(HANDLE_PS_ENCODE, HANDLE_PS_OUT, UCHAR*, UINT, FIXP_DBL*
> (*)[2][2], INT, INT)':
> ps_encode.cpp:1002:34: warning: arithmetic between different enumeration
> types 'PS_CONSTS' and 'PS_BANDS' is deprecated
> [-Wdeprecated-enum-enum-conversion]
>  1002 |                 PS_MAX_ENVELOPES * PS_MAX_BANDS * sizeof(PS_DELTA));
> ```

Another C++ language change. The code needs to be fixed.

> codec davs2
> ```
> decoder.cc: In function 'void decoder_signal(davs2_t*, davs2_frame_t*, int)':
> decoder.cc:268:12: warning: '++' expression of 'volatile'-qualified type is
> deprecated [-Wvolatile]
>   268 |     frame->i_decoded_line++;
>       |     ~~~~~~~^~~~~~~~~~~~~~
> ```

Another language change. The code needs to be fixed.


> vapoursynth
> ```
> avisynth_compat.cpp:1309:56: error: no match for 'operator+' (operand types
> are 'const char [16]' and 'std::u8string' {aka
> 'std::__cxx11::basic_string<char8_t>'})
>  1309 |             vsapi->mapSetError(out, ("Failed to load " +
> fsPath.u8string() + ". GetLastError() returned " + std::to_string(lastError)
> + ". The file you tried to load or one of its dependencies is probably
> missing.").c_str());
>       |                                      ~~~~~~~~~~~~~~~~~ ^
> ~~~~~~~~~~~~~~~~~
>       |                                      |                              
> |
>       |                                      const char [16]                
> std::u8string {aka std::__cxx11::basic_string<char8_t>}
> ```

In C++17 std::u8string was a typedef for std::string, but in C++20 it's a
different type, std::basic_string<char8_t>. You cannot append char to a string
of char8_t.

The code needs to be fixed. The simplest fix is to just change
fsPath.u8string() to fsPath.string().

Reply via email to