static pointer pointer_traits::pointer_to(element_type& r); // (1) C++11
static constexpr pointer pointer_traits::pointer_to(element_type& r); // (1) C++26
static pointer pointer_traits<T*>::pointer_to(element_type& r) noexcept; // (2) C++11
static constexpr pointer pointer_traits<T*>::pointer_to(element_type& r) noexcept; // (2) C++20
概要
変数へのポインタを取得する。
戻り値
- (1) : 型
Ptrが静的メンバ関数pointer_to()を持っていればPtr::pointer_to(r)を呼び出してその戻り値を返す。持っていなければ、この関数のインスタンス化は不適格となる。 - (2) :
addressof(r)を返す。
例
#include <memory>
#include <iostream>
int main()
{
int value = 3;
int* p = std::pointer_traits<int*>::pointer_to(value);
std::cout << *p << std::endl;
}
出力
3
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.7.3 ✅
- ICC: ??
- Visual C++: 2012 ✅, 2013 ✅
参照
- P1006R1 Constexpr in
std::pointer_traits- C++20で、生ポインタの特殊化(2)
pointer_traits<T*>::pointer_toにconstexprが付いた(プライマリテンプレート(1)は、reinterpret_castを使うfancy pointerを排除しないため対象外とされた)
- C++20で、生ポインタの特殊化(2)
- LWG Issue 3454.
pointer_traits::pointer_toshould beconstexpr- C++26で、プライマリテンプレートの(1)
pointer_traits::pointer_toにもconstexprが付いた。これによりfancy pointerを使うconstexprコンテナ(SSOを用いたconstexpr std::stringなど)が定数式で動作できるようになる。この変更は欠陥報告 (DR) であり、C++26より前のバージョンでもコンパイラが早期に対応している場合がある
- C++26で、プライマリテンプレートの(1)