// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This is a "No Compile Test" suite.
// https://dev.chromium.org/developers/testing/no-compile-tests
#include "base/containers/heap_array.h"
#include <memory>
namespace base {
namespace {
struct ConstructorRequiresArgs {
ConstructorRequiresArgs(int val) : val_(val) {}
int val_;
};
struct NonTrivialClass {
std::unique_ptr<int> ptr_;
};
void WontCompileUninithNonTrivialClass() {
auto vec = HeapArray<NonTrivialClass>::Uninit(2u); // expected-error {{constraints not satisfied}}
}
void WontCompileWithSizeConstructorRequiresArgs() {
auto vec = HeapArray<ConstructorRequiresArgs>::WithSize(2u); // expected-error {{constraints not satisfied}}
}
void WontCompileUninitConstructorRequiresArgs() {
auto vec = base::HeapArray<ConstructorRequiresArgs>::Uninit(2u); // expected-error {{constraints not satisfied}}
}
void WontCompileConstNotAllowed() {
auto vec = base::HeapArray<const int>(); // expected-error@*:* {{HeapArray cannot hold const types}}
}
void WontCompileReferencesNotAllowed() {
auto vec = base::HeapArray<int&>(); // expected-error@*:* {{HeapArray cannot hold reference types}}
}
int* WontCompileDataLifetime() {
return HeapArray<int>::WithSize(1u).data(); // expected-error {{returning address}}
}
HeapArray<int>::iterator WontCompileBeginLifetime() {
return HeapArray<int>::WithSize(1u).begin(); // expected-error {{returning address}}
}
HeapArray<int>::iterator WontCompileEndLifetime() {
return HeapArray<int>::WithSize(1u).end(); // expected-error {{returning address}}
}
int& WontCompileIndexLifetime() {
return HeapArray<int>::WithSize(1u)[0]; // expected-error {{returning reference}}
}
base::span<int> WontCompileSpanLifetime() {
return HeapArray<int>::WithSize(1u).as_span(); // expected-error {{returning address}}
}
} // namespace
} // namespace base