45 lines
1.7 KiB
C++
45 lines
1.7 KiB
C++
// Copyright 2015 The Crashpad Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef CRASHPAD_UTIL_MISC_IMPLICIT_CAST_H_
|
|
#define CRASHPAD_UTIL_MISC_IMPLICIT_CAST_H_
|
|
|
|
namespace crashpad {
|
|
|
|
// Use implicit_cast as a safe version of static_cast or const_cast
|
|
// for upcasting in the type hierarchy (i.e. casting a pointer to Foo
|
|
// to a pointer to SuperclassOfFoo or casting a pointer to Foo to
|
|
// a const pointer to Foo).
|
|
// When you use implicit_cast, the compiler checks that the cast is safe.
|
|
// Such explicit implicit_casts are necessary in surprisingly many
|
|
// situations where C++ demands an exact type match instead of an
|
|
// argument type convertible to a target type.
|
|
//
|
|
// The From type can be inferred, so the preferred syntax for using
|
|
// implicit_cast is the same as for static_cast etc.:
|
|
//
|
|
// implicit_cast<ToType>(expr)
|
|
//
|
|
// implicit_cast would have been part of the C++ standard library,
|
|
// but the proposal was submitted too late. It will probably make
|
|
// its way into the language in the future.
|
|
template <typename To, typename From>
|
|
constexpr To implicit_cast(From const& f) {
|
|
return f;
|
|
}
|
|
|
|
} // namespace crashpad
|
|
|
|
#endif // CRASHPAD_UTIL_MISC_IMPLICIT_CAST_H_
|