From 0f3ba43eb417ef673c653ca0534d20134e4e56bf Mon Sep 17 00:00:00 2001 From: Neal Gafter Date: Mon, 16 Feb 2015 14:08:50 -0800 Subject: [PATCH] Allow a method's type parameter to be used in nameof() in parameter default value Fixes #42 --- .../CSharp/Portable/Binder/Binder_Expressions.cs | 2 +- .../CSharp/Test/Semantic/Semantics/NameOfTests.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Compilers/CSharp/Portable/Binder/Binder_Expressions.cs b/src/Compilers/CSharp/Portable/Binder/Binder_Expressions.cs index 022f0e3393842..facac17d6306f 100644 --- a/src/Compilers/CSharp/Portable/Binder/Binder_Expressions.cs +++ b/src/Compilers/CSharp/Portable/Binder/Binder_Expressions.cs @@ -846,7 +846,7 @@ private BoundExpression BindDefaultExpression(DefaultExpressionSyntax node, Diag options |= LookupOptions.MustBeInvocableIfMember; } - if (!IsInMethodBody) + if (!IsInMethodBody && this.EnclosingNameofArgument == null) { Debug.Assert((options & LookupOptions.NamespacesOrTypesOnly) == 0); options |= LookupOptions.MustNotBeMethodTypeParameter; diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs index 072bf3d0f7100..ff7d7dc2bd975 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/NameOfTests.cs @@ -1155,5 +1155,18 @@ public static void Main() var compilation = CreateCompilationWithMscorlib45(source); var comp = CompileAndVerify(source, expectedOutput: @"N1N2"); } + + [Fact, WorkItem(42, "github.com/dotnet/roslyn")] + public void NameofTypeParameterInParameterInitializer() + { + var source = +@"class Test { + void M( + T t = default(T), // ok + string s = nameof(T) // ok + ) { } +}"; + var compilation = CreateCompilationWithMscorlib45(source).VerifyDiagnostics(); + } } }