**Version Used**: 2.1.0.61520 **Steps to Reproduce**: Try to compile ```csharp using System; static class Test { static void Deconstruct(this DateTime date, out int year, out int month, out int day) { year = date.Year; month = date.Month; day = date.Day; } static void Main() { (int year, int month, int day) = DateTime.UtcNow; Console.WriteLine(year); Console.WriteLine(month); Console.WriteLine(day); } } ``` without a reference to `System.ValueTuple.dll` **Expected Behavior**: Compilation with no errors. No tuple literals or tuple types are involved. **Actual Behavior**: Error: > Test.cs(16,9): error CS8179: Predefined type 'System.ValueTuple`3' is not defined or imported When compiling with a reference to `System.ValueTuple.dll`, the resulting IL has no reference to `System.ValueTuple.dll`, so why is it required at compile-time? This is very surprising. There mention of this in #11299: > I assume deconstruction-assignment should work even if System.ValueTuple is not present. (answer: that is no longer the case, ValueTuple is required) I haven't found any mention of that in the [LDM meetings](https://github.com/dotnet/csharplang/tree/master/meetings). - Is this likely to be permanent? - Any chance of an explanation of a seemingly-arbitrary requirement?