Exactly, there's nothing stopping a user from writing a range of `char` (an ASCII string for example), so I don't think that's a good approach.

I don't believe `is(A : const(char[]))` is correct either. That checks if `A` implicitly converts to `const(char[])`, so, for example, `Foo` below would pass the check, but `ptr` would not be a `const(char)*` and the function would fail or have unexpected behaviour.

```d
struct Foo
{
	const(char[]) str;
	alias str this;
	@property Foo* ptr() { return &this; }
}
```

I believe what I have is correct.