- utility[meta header]
- std[meta namespace]
- function template[meta id-type]
- cpp17[meta cpp]
namespace std {
template <class T>
constexpr add_const_t<T>& as_const(T& t) noexcept;
template <class T>
void as_const(const T&&) = delete;
}
- add_const_t[link /reference/type_traits/add_const.md]
左辺値参照をconst
左辺値参照にする。
const
と非const
のオーバーロードがある場合、const
版を明示的に呼び出す目的で使われる。
add_const_t<T>&(t)
- add_const_t[link /reference/type_traits/add_const.md]
投げない
#include <iostream>
#include <utility>
struct A {
void f()
{
std::cout << "non-const" << std::endl;
}
void f() const
{
std::cout << "const" << std::endl;
}
};
int main()
{
A a;
a.f(); // f()が呼ばれる
std::as_const(a).f(); // f() constが呼ばれる
}
- std::as_const[color ff0000]
non-const
const
- C++17
- Clang: 3.8 [mark verified]
- GCC: 7.1 [mark verified]
- ICC: ??
- Visual C++: 2015 Update 2 [mark verified]