Thanks to visit codestin.com
Credit goes to chromium.googlesource.com

blob: ee8c9713a31116303a038bf05dac902178c073b3 [file] [log] [blame]
// Copyright 2025 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.
// http://dev.chromium.org/developers/testing/no-compile-tests
#include "base/strings/lazy_string_builder.h"
#include <string>
#include <string_view>
#include <vector>
#include "base/strings/string_number_conversions.h"
// Verify that passing an rvalue string to LazyStringBuilder::AppendByReference() will cause
// a compile error.
namespace base {
namespace {
void WontCompileRValueString() {
auto builder = LazyStringBuilder::CreateForTesting();
std::string movable = "movable";
builder.AppendByReference(std::string("foo")); // expected-error {{call to deleted member function}}
builder.AppendByReference(NumberToString(3)); // expected-error {{call to deleted member function}}
builder.AppendByReference(std::move(movable)); // expected-error {{call to deleted member function}}
builder.AppendByReference("hello ", std::string("world")); // expected-error {{no matching member function for call}}
builder.AppendByReference("value: ", NumberToString(7)); // expected-error {{no matching member function for call}}
builder.AppendByReference("", std::move(movable)); // expected-error {{no matching member function for call}}
}
void WontCompileLifetimeError() {
auto builder = LazyStringBuilder::CreateForTesting();
builder.AppendByReference(std::string_view(NumberToString(3))); // expected-error {{object whose reference is captured by 'builder' will be destroyed at the end of the full-expression}}
builder.AppendByReference("", std::string_view(NumberToString(3))); // expected-error {{object whose reference is captured by 'builder' will be destroyed at the end of the full-expression}}
builder.AppendByReference(NumberToString(3).c_str()); // expected-error {{object whose reference is captured by 'builder' will be destroyed at the end of the full-expression}}
builder.AppendByReference("", NumberToString(3).c_str()); // expected-error {{object whose reference is captured by 'builder' will be destroyed at the end of the full-expression}}
}
void WontCompileLocal(LazyStringBuilder& builder) {
builder.AppendByReference(std::vector({'a', '\0'}).data()); // expected-error {{object whose reference is captured by 'builder' will be destroyed at the end of the full-expression}}
builder.AppendByReference("", std::vector({'a', '\0'}).data()); // expected-error {{object whose reference is captured by 'builder' will be destroyed at the end of the full-expression}}
}
void WontCompileConstructorAccessRestricted() {
LazyStringBuilder builder1; // expected-error {{no matching constructor}}
LazyStringBuilder builder2({}); // expected-error {{calling a private constructor}}
LazyStringBuilder builder3{LazyStringBuilder::AccessKey()}; // expected-error {{calling a private constructor}}
}
} // namespace
} // namespace base