/* TEST_OUTPUT: --- fail_compilation/fail14089.d(41): Error: `1` has no effect fail_compilation/fail14089.d(41): Error: `1` has no effect fail_compilation/fail14089.d(42): Error: `1` has no effect fail_compilation/fail14089.d(42): Error: `n` has no effect fail_compilation/fail14089.d(43): Error: `1` has no effect fail_compilation/fail14089.d(43): Error: `s.val` has no effect fail_compilation/fail14089.d(44): Error: `n` has no effect fail_compilation/fail14089.d(44): Error: `1` has no effect fail_compilation/fail14089.d(45): Error: `s.val` has no effect fail_compilation/fail14089.d(45): Error: `1` has no effect --- */ bool cond; void main() { int foo() { return 0; } int n; struct S { int val; } S s; // The whole of each CondExps has side effects, So no error. cond ? foo() : n; cond ? foo() : s.val; cond ? 1 : foo(); cond ? n : foo(); cond ? s.val : foo(); cond ? (n = 1) : 1; cond ? (n = 1) : n; cond ? (n = 1) : s.val; cond ? 1 : (n = 1); cond ? n : (n = 1); cond ? s.val : (n = 1); // errors cond ? 1 : 1; cond ? 1 : n; cond ? 1 : s.val; cond ? n : 1; cond ? s.val : 1; }