forked from firka/flutter
c2eecba786d3a3c74f2c8bca99f1a9cf02e6e7e9
CanvasRecorder if IMPELLER_TRACE_CANVAS is not set. (flutter/engine#46476)
Internal bug: b/303067268
https://github.com/flutter/engine/pull/46376 is causing a breakage to the internal engine build because of 543348a044/impeller/aiks/canvas_recorder.h (L58-L62). Internally, we do not set `IMPELLER_TRACE_CANVAS`.
It looks like the cause is that the internal toolchain causes the `static_assert` to be compiled even though the template is not instantiated.
@chingjun helped me to figure out the following:
https://stackoverflow.com/questions/5246049/c11-static-assert-and-template-instantiation points us to the spec. In the later version (ISO/IEC 14882:2017(E)):
> The program is ill-formed, no diagnostic required, if ... no valid specialization can be generated for a template or a substatement of a constexpr if statement (9.4.1) within a template and the template is not instantiated,
<details>
<summary>The relevant section</summary>

</details>
Interpretation: the compiler can either choose to emit the error caused by the `static_assert` or not. Currently the compiler used by the build here on LUCI does not; internally it does.
For example, the following links shows that simply changing the Clang version affects whether the error appears or not for a minimal template.
- ok: https://godbolt.org/z/n9nYrcvcP
- not ok: https://godbolt.org/z/fWcvdcn35
Hence, `#ifdef` out the class instead of using a `static_assert` for more consistent behavior across these two toolchains.
[C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
Description
No description provided
Languages
Dart
75.4%
C++
16.4%
Objective-C++
2.7%
Java
2.7%
Objective-C
0.6%
Other
1.8%