1*6777b538SAndroid Build Coastguard Worker// Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker// This is a "No Compile Test" suite. 6*6777b538SAndroid Build Coastguard Worker// http://dev.chromium.org/developers/testing/no-compile-tests 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker#include "base/functional/overloaded.h" 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker#include "third_party/abseil-cpp/absl/types/variant.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Workernamespace base { 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Workervoid LambdaMissingForVariantElement() { 15*6777b538SAndroid Build Coastguard Worker // `absl::visit()` may only be called on an `Overloaded` that can actually 16*6777b538SAndroid Build Coastguard Worker // handle all potential input variant types. 17*6777b538SAndroid Build Coastguard Worker struct A {}; 18*6777b538SAndroid Build Coastguard Worker struct B {}; 19*6777b538SAndroid Build Coastguard Worker absl::variant<A, B> var = A{}; 20*6777b538SAndroid Build Coastguard Worker absl::visit(Overloaded{[](A& pack) { return "A"; }}, var); // expected-error-re@*:* {{no type named 'type' in 'absl::type_traits_internal::result_of<base::Overloaded<(lambda at {{.*}})> (B &)>'}} 21*6777b538SAndroid Build Coastguard Worker} 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker} // namespace base 24