Checking if UFCS function exists for a specific type

Rory McGuire rjmcguire at gmail.com
Fri Aug 30 01:28:49 PDT 2013


On Thursday, 29 August 2013 at 21:10:41 UTC, Rory McGuire wrote:
> On Thursday, 29 August 2013 at 21:06:04 UTC, Rory McGuire wrote:
>> Hi all,
>>
>> I've got this little ctfe template function that checks if a 
>> function called member with first argument T exists. Its for 
>> checking if a type has a custom encoder.
>>
>> bool hasUFCSmember(T, string member)() {
>> 	T v;
>> 	// would be nice if we could use ParameterTypeTuple to get 
>> the first arg and check for exact type match
>> 	
>> 	return __traits(compiles, mixin(member ~"(v)"));
>> }
>
> forum posted when I hit tab. Meant to ask:
>
> Is there a way to make sure that the compiler is not implicitly 
> casting T?
> Currently it returns true for bool, enum, int etc... even if 
> the only function available is for an int.
>
> I also have:
> template hasUFCSmember(T, string member) {
> 	 enum hasUFCSmember = __traits(compiles, mixin(member 
> ~"(T.init)"));
> }
> But it doesn't work for types such as string[string] because 
> T.init is null.
>
> Any help will be greatly appreciated.
>
> Thanks,
> R

I suppose I can avoid the implicit casts for function lookup by 
using Typedef.

Thanks,
R


More information about the Digitalmars-d-learn mailing list