mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
69 lines
2.5 KiB
D
69 lines
2.5 KiB
D
// REQUIRED_ARGS: -w -o-
|
|
|
|
/*
|
|
TEST_OUTPUT:
|
|
---
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `char += float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `int += float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `long += double` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `char -= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `int -= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `long -= double` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `char *= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `int *= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `long *= double` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `char /= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `int /= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `long /= double` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `char %= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `int %= float` is performing truncating conversion
|
|
fail_compilation/b3841.d-mixin-32(32): Warning: `long %= double` is performing truncating conversion
|
|
Error: warnings are treated as errors
|
|
Use -wi if you wish to treat warnings only as informational.
|
|
---
|
|
*/
|
|
|
|
|
|
void f(string op, LHS, RHS)()
|
|
{
|
|
// pragma(msg, LHS, " += ", RHS);
|
|
LHS a;
|
|
RHS b;
|
|
mixin("a "~op~" b;");
|
|
}
|
|
|
|
template Ops(T...)
|
|
{
|
|
alias Ops = T;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
foreach (string op; Ops!("+=", "-=", "*=", "/=", "%="))
|
|
{
|
|
// OK
|
|
f!(op, int, int)();
|
|
f!(op, long, int)();
|
|
f!(op, long, short)();
|
|
f!(op, float, long)();
|
|
f!(op, double, float)();
|
|
|
|
// Should that really be OK ?
|
|
f!(op, short, int)();
|
|
f!(op, float, double)();
|
|
|
|
// Not OK, truncating conversion.
|
|
f!(op, char, float)();
|
|
f!(op, int, float)();
|
|
f!(op, long, double)();
|
|
}
|
|
|
|
// OK
|
|
f!("^^=", int, int)();
|
|
f!("^^=", long, int)();
|
|
f!("^^=", long, short)();
|
|
f!("^^=", float, long)();
|
|
f!("^^=", double, float)();
|
|
// Should that really be OK ?
|
|
f!("^^=", float, double)();
|
|
}
|