// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
class SomeClass {};
class MyClass {
public:
// Error expected.
SomeClass* raw_ptr_field;
// No error expected.
int int_field;
// Error expected.
SomeClass& raw_ref_field;
};
struct MyStruct {
// Error expected.
SomeClass* raw_ptr_field;
// No error expected.
int int_field;
// "*" next to the field name. This is non-standard formatting, so
// "clang-format off" is used to make sure |git cl format| won't change this
// testcase.
//
// Error expected.
// clang-format off
SomeClass *raw_ptr_field2;
// clang-format on
// Error expected.
SomeClass& raw_ref_field;
// No error expected.
int int_field2;
// "&" next to the field name. This is non-standard formatting, so
// "clang-format off" is used to make sure |git cl format| won't change this
// testcase.
//
// Error expected.
// clang-format off
SomeClass &raw_ref_field2;
// clang-format on
};
template <typename T>
class MyTemplate {
public:
// Error expected.
T* raw_ptr_field;
// No error expected.
int int_field;
// Error expected.
T& raw_ref_field;
};
// The field below won't compile without the |typename| keyword (because
// at this point we don't know if MaybeProvidesType<T>::Type is a type,
// value or something else).
template <typename T>
struct MaybeProvidesType;
template <typename T>
struct DependentNameTest {
// Error expected. Even though MaybeProvidesType<T>::Type is an unknown type,
// MaybeProvidesType<Type::Type* must be a pointer so an error is expected.
typename MaybeProvidesType<T>::Type* field;
// Error expected. Even though MaybeProvidesType<T>::Type is an unknown type,
// MaybeProvidesType<Type::Type& must be a reference so an error is expected.
typename MaybeProvidesType<T>::Type& ref_field;
};