mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 21:21:48 +03:00
46 lines
1.4 KiB
D
46 lines
1.4 KiB
D
// https://issues.dlang.org/show_bug.cgi?id=21380
|
|
/*
|
|
TEST_OUTPUT:
|
|
---
|
|
fail_compilation/test21380.d(39): Error: partial template instance `MySerializer().serializeSinkType!int` has no value
|
|
fail_compilation/test21380.d(44): Error: template instance `test21380.SupportSinkTypeSer!(MySerializer!int)` error instantiating
|
|
---
|
|
*/
|
|
|
|
template isSomeFunction(T...)
|
|
if (T.length == 1)
|
|
{
|
|
static if (is(typeof(& T[0]) U : U*) && is(U == function) || is(typeof(& T[0]) U == delegate))
|
|
{
|
|
// T is a (nested) function symbol.
|
|
enum bool isSomeFunction = true;
|
|
}
|
|
else static if (is(T[0] W) || is(typeof(T[0]) W))
|
|
{
|
|
// T is an expression or a type. Take the type of it and examine.
|
|
static if (is(W F : F*) && is(F == function))
|
|
enum bool isSomeFunction = true; // function pointer
|
|
else
|
|
enum bool isSomeFunction = is(W == function) || is(W == delegate);
|
|
}
|
|
else
|
|
enum bool isSomeFunction = false;
|
|
}
|
|
|
|
struct MySerializer (T)
|
|
{
|
|
void serializeSinkType(T2) (scope auto ref T2 record) {}
|
|
}
|
|
|
|
template SupportSinkTypeSer(SerT)
|
|
{
|
|
/* Note: Partial template instance because it needs inference, in this case
|
|
it cannot infer 'auto ref' parameter */
|
|
enum SupportSinkTypeSer = isSomeFunction!(SerT.init.serializeSinkType!int);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
enum x = SupportSinkTypeSer!(MySerializer!int);
|
|
return 0;
|
|
}
|