blob: 00dd9fd7cba48e50f0bfa4b81a3e534c0d085f77 [file] [log] [blame]
/*
REQUIRED_ARGS: -verrors=spec -o-
TEST_OUTPUT:
---
(spec:1) fail_compilation/fail20730b.d-mixin-43(43): Error: C style cast illegal, use `cast(int)mod`
fail_compilation/fail20730b.d(26): Error: none of the overloads of template `fail20730b.atomicOp` are callable using argument types `!("+=")(shared(uint), int)`
fail_compilation/fail20730b.d(41): Candidate is: `atomicOp(string op, T, V1)(shared ref T val, V1 mod)`
with `op = "+=",
T = uint,
V1 = int`
must satisfy the following constraint:
` __traits(compiles, mixin("(int)mod"))`
---
*/
void test20730()
{
auto f = File().byLine;
}
struct File
{
shared uint refs;
this(this)
{
atomicOp!"+="(refs, 1);
}
struct ByLineImpl(Char)
{
File file;
char[] line;
}
auto byLine()
{
return ByLineImpl!char();
}
}
T atomicOp(string op, T, V1)(ref shared T val, V1 mod)
// C-style cast causes raises a parser error whilst gagged.
if (__traits(compiles, mixin("(int)mod")))
{
return val;
}