1 module imports.diag10141b; 2 3 template isSomeChar(T) { 4 enum isSomeChar = 5 is(immutable T == immutable char) || 6 is(immutable T == immutable wchar) || 7 is(immutable T == immutable dchar); 8 } 9 10 struct Appender(A : T[], T) 11 { 12 private template canPutItem(U) 13 { 14 enum bool canPutItem = 15 //isImplicitlyConvertible!(U, T) || 16 isSomeChar!T && isSomeChar!U; 17 } 18 private template canPutRange(Range) 19 { 20 enum bool canPutRange = 21 //isInputRange!Range && 22 is(typeof(Appender.init.put("a"d[0]))); 23 } 24 25 /** 26 * Appends one item to the managed array. 27 */ 28 void put(U)(U item) if (canPutItem!U) 29 { 30 char[T.sizeof == 1 ? 4 : 2] encoded; 31 auto len = 1; 32 put(encoded[0 .. len]); // ! 33 } 34 35 /** 36 * Appends an entire range to the managed array. 37 */ 38 void put(Range)(Range items) if (canPutRange!Range) 39 { 40 } 41 } 42 43 void put(R, E)(ref R r, E e) 44 { 45 static if (is(typeof(r.put(e)))) 46 { 47 r.put(e); 48 } 49 else 50 { 51 static assert(false, 52 "Cannot put a "~E.stringof~" into a "~R.stringof); 53 } 54 } 55