Jim M. schrieb:
> Schau Dir mal den C Präprozessor Output (gcc -E) in obigen Fällen an.
>
> Die "config.h" ist im Falle "C Compiler ohne C++" total leer.
Ja das hät ich auch erwartet. Der C Compiler compiliert Sourcen mit dem
Header auch ohne Probleme.
Und mein Beispiel eben compiliert unter Clang doch nicht, zumindest
nicht mit inline Keyword...
1 | #if defined(__cplusplus)
|
2 | extern "C" {
|
3 | #endif
|
4 |
|
5 | #ifdef __cplusplus
|
6 | namespace a {
|
7 | inline constexpr auto v = 42;
|
8 | }
|
9 |
|
10 | namespace b {
|
11 | inline constexpr auto v = 42;
|
12 | }
|
13 | #endif
|
14 |
|
15 | #ifdef __cplusplus
|
16 | }
|
17 | #endif
|
Soweit ich das bis jetzt kapiert hab dürfte Clang hier schon recht
haben. Die Variablen bekommen C-Linkage und es kommt tatsächlich zu
einer Redefinition. Sehr böse...
/edit
Und noch gemeiner dass GCC hier lediglich warnt.
/edit2
Durch das ändern von inline constexpr in static constexpr lässt sich das
Problem umgehen.