blob: fc201aaf882c7f6fb4f0d3fb98e459ff1d299ae5 [file] [log] [blame]
// PERMUTE_ARGS:
// Prefer immutable(char)[] to all others
int foo( char[] a) { return 11; }
int foo( const char[] a) { return 12; }
int foo(immutable char[] a) { return 13; }
int foo( wchar[] a) { return 21; }
int foo( const wchar[] a) { return 22; }
int foo(immutable wchar[] a) { return 23; }
int foo( dchar[] a) { return 31; }
int foo( const dchar[] a) { return 32; }
int foo(immutable dchar[] a) { return 33; }
// Prefer const conversion over polysemous conversion
int bar( char[] a) { return 11; }
int bar( const char[] a) { return 12; }
// bar(immutable char[] a);
int bar( wchar[] a) { return 21; }
int bar( const wchar[] a) { return 22; }
// bar(immutable wchar[] a);
int bar( dchar[] a) { return 31; }
int bar( const dchar[] a) { return 32; }
// bar(immutable dchar[] a);
// No conversion to mutable
int baz( char[] a) { return 11; }
// baz( const char[] a);
// baz(immutable char[] a);
int baz( wchar[] a) { return 21; }
// baz( const wchar[] a);
// baz(immutable wchar[] a);
int baz( dchar[] a) { return 31; }
// baz( const dchar[] a);
// baz(immutable dchar[] a);
int main()
{
auto strn = "a";
auto strc = "a"c;
auto strw = "a"w;
auto strd = "a"d;
assert(foo("a" ) == 13);
assert(foo(strn) == 13);
assert(foo("a"c) == 13);
assert(foo(strc) == 13);
assert(foo("a"w) == 23);
assert(foo(strw) == 23);
assert(foo("a"d) == 33);
assert(foo(strd) == 33);
assert(bar("a" ) == 12);
assert(bar(strn) == 12);
assert(bar("a"c) == 12);
assert(bar(strc) == 12);
assert(bar("a"w) == 22);
assert(bar(strw) == 22);
assert(bar("a"d) == 32);
assert(bar(strd) == 32);
static assert(!__traits(compiles, baz("a" ) ));
static assert(!__traits(compiles, baz(strn) ));
static assert(!__traits(compiles, baz("a"c) ));
static assert(!__traits(compiles, baz(strc) ));
static assert(!__traits(compiles, baz("a"w) ));
static assert(!__traits(compiles, baz(strw) ));
static assert(!__traits(compiles, baz("a"d) ));
static assert(!__traits(compiles, baz(strd) ));
return 0;
}