You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
short test27(int (& const arr)[6][291]) { return 0;};
with MSVC gives warning C4227: anachronism used: qualifiers on reference are ignored
and hence mangles as
?test27@@YAFAE_A_Y15BCD@H@Z (without the underscores, A being mutable)
whereas DMD mangles
extern(C++) short test27(const ref int[291][6] t);
as
?test27@@YAFAE_B_Y15BCD@H@Z (without the underscores, B being const).
The text was updated successfully, but these errors were encountered:
The `const` in the D signature doesn't apply to the reference itself, but to the type, i.e., is the same as `ref const(int[291][6])`, and as such your C++ example isn't an analogon.
Proper analogon with a 1D array, showing that the problem goes somewhat deeper:
C++: short test27(const int (&)[291]);
Win64 mangle: ?test27@@YAFAEAY0BCD@$$CBH@Z
D: extern(C++) short test27(const ref int[291])
Win64 mangle: ?test27@@YAFAEBY0BCD@H@Z
Related issue for Linux x64:
C++: short test27(const int (&)[6][291])
_Z6test27RA6_A291_Ki
D: extern(C++) short test27(ref const int[291][6])
_Z6test27RKA6_KA291_Ki
Note that the C++ mangling of `const(int[291][6])` and `const(int)[291][6]` is identical for both MSVC and Itanium (and that's fine IMO).
Nicholas Wilson (@thewilsonator) reported this on 2019-06-11T14:04:23Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=19953
CC List
Description
The text was updated successfully, but these errors were encountered: