From 9f9988bfeb66a36362b72ba46a48daac76758fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simen=20Kj=C3=A6r=C3=A5s?= Date: Mon, 3 Dec 2018 10:49:46 +0100 Subject: [PATCH] Fix issue 19456 - ParameterIdentifierTuple incorrect for abstract methods with unnamed parameters --- std/traits.d | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/std/traits.d b/std/traits.d index 47ecc8e8965..f0938aea36c 100644 --- a/std/traits.d +++ b/std/traits.d @@ -1381,7 +1381,9 @@ if (func.length == 1 && isCallable!func) { static if (!isFunctionPointer!func && !isDelegate!func // Unnamed parameters yield CT error. - && is(typeof(__traits(identifier, PT[i .. i+1])))) + && is(typeof(__traits(identifier, PT[i .. i+1]))) + // Filter out unnamed args, which look like (Type) instead of (Type name). + && PT[i].stringof != PT[i .. i+1].stringof[1..$-1]) { enum Get = __traits(identifier, PT[i .. i+1]); } @@ -1418,6 +1420,16 @@ if (func.length == 1 && isCallable!func) static assert([ParameterIdentifierTuple!foo] == ["num", "name", ""]); } +// Issue 19456 +@safe unittest +{ + struct SomeType {} + void foo(SomeType); + void bar(int); + static assert([ParameterIdentifierTuple!foo] == [""]); + static assert([ParameterIdentifierTuple!bar] == [""]); +} + @safe unittest { alias PIT = ParameterIdentifierTuple;