abseil-cpp/absl/flags/declare.h
Go to the documentation of this file.
1 //
2 // Copyright 2019 The Abseil Authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // https://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 // -----------------------------------------------------------------------------
17 // File: declare.h
18 // -----------------------------------------------------------------------------
19 //
20 // This file defines the ABSL_DECLARE_FLAG macro, allowing you to declare an
21 // `absl::Flag` for use within a translation unit. You should place this
22 // declaration within the header file associated with the .cc file that defines
23 // and owns the `Flag`.
24 
25 #ifndef ABSL_FLAGS_DECLARE_H_
26 #define ABSL_FLAGS_DECLARE_H_
27 
28 #include "absl/base/config.h"
29 
30 namespace absl {
32 namespace flags_internal {
33 
34 // absl::Flag<T> represents a flag of type 'T' created by ABSL_FLAG.
35 template <typename T>
36 class Flag;
37 
38 } // namespace flags_internal
39 
40 // Flag
41 //
42 // Forward declaration of the `absl::Flag` type for use in defining the macro.
43 #if defined(_MSC_VER) && !defined(__clang__)
44 template <typename T>
45 class Flag;
46 #else
47 template <typename T>
49 #endif
50 
52 } // namespace absl
53 
54 // ABSL_DECLARE_FLAG()
55 //
56 // This macro is a convenience for declaring use of an `absl::Flag` within a
57 // translation unit. This macro should be used within a header file to
58 // declare usage of the flag within any .cc file including that header file.
59 //
60 // The ABSL_DECLARE_FLAG(type, name) macro expands to:
61 //
62 // extern absl::Flag<type> FLAGS_name;
63 #define ABSL_DECLARE_FLAG(type, name) ABSL_DECLARE_FLAG_INTERNAL(type, name)
64 
65 // Internal implementation of ABSL_DECLARE_FLAG to allow macro expansion of its
66 // arguments. Clients must use ABSL_DECLARE_FLAG instead.
67 #define ABSL_DECLARE_FLAG_INTERNAL(type, name) \
68  extern absl::Flag<type> FLAGS_##name; \
69  namespace absl /* block flags in namespaces */ {} \
70  /* second redeclaration is to allow applying attributes */ \
71  extern absl::Flag<type> FLAGS_##name
72 
73 #endif // ABSL_FLAGS_DECLARE_H_
ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_END
Definition: third_party/abseil-cpp/absl/base/config.h:171
ABSL_NAMESPACE_BEGIN
#define ABSL_NAMESPACE_BEGIN
Definition: third_party/abseil-cpp/absl/base/config.h:170
absl::flags_internal::Flag
Definition: abseil-cpp/absl/flags/declare.h:36
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31


grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:08