constexpr の検索結果:

C++1z コンパイル時条件の論理演算

C++

…ass... B> constexpr bool conjunction_v = conjunction<B...>::value; template <class... B> constexpr bool disjunction_v = disjunction<B...>::value; template <class B> constexpr bool negation_v = negation<B>::value; } conjunctionはコンパイル時条件の論理積 …

C++1z 関数が呼び出し可能かを判定する型特性

C++

…s> inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::value; template <class R, class Fn, class... ArgTypes> inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value; template <class Fn, class...…

C++1z constexprラムダ

C++

…zからは、ラムダ式をconstexprとして定義・実行できるようになります。 ラムダ式をconstexprにするには、これまでmutableを付けていたところに、constexprを付けます。 int main() { auto add = [](int x) constexpr { return x + 1; }; static_assert(add(1) == 2); } ラムダ式には、constexprとmutableを両方、順不同で指定できます ラムダ式にconste…

コンストラクタに用途別の名前を付ける

C++

…nit_t {}; constexpr default_init_t default_init {}; // vectorのコンストラクタ vector::vector(size_type, default_init_t); // 3要素の配列を用意し、各要素の値を未初期化状態にする vector<T> v(3, default_init); この場合、単に3という1引数を渡すだけだと値初期化したリサイズ操作になりますが、default_initというタグを付けることによって…

C++1z static_assertのメッセージ省略を許可

C++

…るようになります。 constexpr int a = 1; constexpr int b = 1; static_assert(a == b); // 新機能。デフォルトのメッセージを使用する static_assert(a == b, "a must equal to b"); // 従来のメッセージを明示的に渡す方法 メッセージを省略した場合、表明に失敗した際に出力されるメッセージの内容は未規定です。 参照 N3846 Extending static_assert …

cpprefjp 言語編の状況

C++

…新を列挙はしない。 constexpr ラムダ式 nullptr 更新された定義済みマクロ テンプレート再帰回数の制限緩和 依存名に対するtypenameとtemplateの制限緩和 C++11で導入されたC99互換機能 定義済みマクロ C++14 C++14ページ このバージョンの概要を記載した C++14で追加・更新された各言語機能のリストを作成した C++14で追加・更新されたライブラリ機能の概要を作成した 2進数リテラル ラムダ式の初期化キャプチャ ジェネリックラムダ…

C++14標準ライブラリの小さな変更 その7

C++

… { static constexpr size_t value = 2; }; // C++14 struct tuple_size<pair<T1, T2>> : public integral_constant<size_t, 2> {}; } arrayのtuple_size特殊化 namespace std { template <class T> class tuple_size; // 先行宣言 // C++11 template <class T, size_…

C++14標準ライブラリの小さな変更 その5

C++

…タを追加しました。 constexpr error_category() noexcept; // (1) C++14 error_category(const error_category&) = delete; // (2) 単なる記載忘れです。 future/shared_futureの時間指定待機に、例外の仕様を追加 std::future::wait_for() std::future::wait_until() std::shared_future::wait_f…

C++14標準ライブラリの小さな変更 その2

C++

…が追加されました。 constexpr operator value_type() { return value; } // C++11 constexpr operator value_type() noexcept { return value; } // C++14 <ios>ヘッダの以下の関数に、noexceptが追加されました。 iostream_category()関数 : 入出力のエラーカテゴリオブジェクトを作って返す。 namespace std { cons…

GCC 5.0のC++関係機能

…集成体初期化を許可 constexprの制限緩和 サイズ付きデアロケーション -std=c++14オプションが使えるようになる。旧-std=c++1yオプションは非推奨。 C++11周りのライブラリサポート改善 std::listのsize()メンバ関数が、デフォルトでO(1)になる std::dequeとstd::vector<bool>に、ステートフルアロケータのサポートを追加。 iostreamのクラスに、ムーブとswapのサポートを追加。 std::alignとstd…

C++14 complexのconstexpr対応

C++

N3302 Constexpr Library Additions: complex, v2 C++14では、複素数を表すstd::complexクラスのconstexpr対応が行われます。 constexpr化するのは、以下の関数です。 コンストラクタ ゲッター(real, imag) 比較演算子 フリー関数版のゲッター(real, imag) constexpr化しないのは、以下の関数です。 セッター(real, imag) 算術演算子 入出力演算子 数学関数 参照 C+…

C++14 Fundamentals TS 変数テンプレート版のType Traits

C++

…pe Traits constexpr bool b = is_const<T>::value; // 変数テンプレート版 constexpr bool b = is_const_v<T>; 変数テンプレート版は、valueを意味する_vサフィックスが付きます。(初期提案は_cだった) この提案は、std::optionalと同じくC++14後のLibrary Fundamental TSで導入される予定です。 参照 RFC: TypeTraits Variables - s…

enum traitsの話

C++

…e; static constexpr const value_type min; // 最小値 static constexpr const value_type max; // 最大値 static constexpr const value_type ubound; // 最大値+1 static constexpr const size_t count; // 要素数 static constexpr const size_t distinct; // 独立してる値の…

C++14 TS ネットワークバイトオーダーの変換

C++

…ace net { constexpr uint32_t htonl(uint32_t host) noexcept; constexpr uint16_t htons(uint16_t host) noexcept; template <class T> constexpr T hton(T host) noexcept = delete; template <> constexpr unsigned-integral hton(unsigned-integral host…

C++14の言語拡張まとめ

…たラムダキャプチャ constexpr関数の制限緩和 どこからともなく現れる結果の規定(前半, 後半) [[deprecated]]属性 数値リテラルの桁区切り文字 サイズ付きのデアロケーション initializer-listによるaggregate初期化の制約緩和 ロックフリーの定義 シグナルハンドラでできることの制限緩和と明確化 ライブラリ make_unique() コンパイル時整数シーケンス tupleの型指定get() quotedマニピュレータ 共有ロック in…

C++14 constexpr関数の制限緩和

C++

…raints on constexpr functions N3598 constexpr member functions and implicit const N3652 Relaxing constraints on constexpr functions C++14では、constexpr関数の制限がいくつか緩和されます。 緩和されるリストは、以下になります: 変数宣言の許可 if文とswitch文の許可 全てのループ文の許可(for、範囲for、while、do-w…

C++14 tupleの型指定get()

C++

….. Types> constexpr T& get(tuple<Types...>& t) noexcept; template <class T, class... Types> constexpr T&& get(tuple<Types...>&& t) noexcept; template <class T, class... Types> constexpr const T& get(const tuple<Types...>& t) noexcept; } <ut…

C++14 integral_constantに関数呼び出し演算子を追加

C++

… { static constexpr T value = v; using value_type = T; using type = integral_constant<T,v>; constexpr operator value_type() { return value; } constexpr value_type operator()() { return value; } // 追加 }; } メタ関数の適用結果として::valueの代わりに関数呼び出し演算子を使…

C++14 ユーティリティのconstexpr対応

C++

N3471 Constexpr Library Additions: utilities, v3 C++14ではユーティリティとして、以下の機能がconstexprに対応します。 std::initializer_listの全ての関数 std::move(), std::forward(), std::move_if_noexcept() std::pairの操作全般(コピー、ムーブ、代入、swap以外) std::tupleの操作全般(コピー、ムーブ、代入、swap以外) …

C++14 のconstexpr対応

C++

N3470 Constexpr Library Additions: containers, v2 C++14では、std::arrayクラスのconst操作全般、およびget()関数が、constexprに対応します。 ただし、イテレータ操作はconstexprには対応しません。 C++14の他の提案によって、constexpr関数で変数書き換えが許可されたため、非const操作もconstexpr化可能にはなりましたが、提案の順番によってその対応はstd::arrayには…

C++14 のconstexpr対応

C++

N3469 Constexpr Library Additions: chrono, v3 C++14では、ヘッダのconstexpr対応が強化されます。 今回強化されるのは、time_pointクラスの操作全般です。 (durationはC++11時点でconstexpr対応している)

C++14 のconstexpr対応

C++

N3749 Constexpr Library Additions: functional C++14では、ヘッダで定義される関数オブジェクトがconstexprに対応します。 たとえば、2つの値のどちらが小さいか比較を行うstd::less関数オブジェクトの場合、以下のように関数呼び出し演算子にconstexprが付きます。 template <class T> struct less { typedef T first_argument_type; typedef T s…

stringリテラルと秒リテラルは競合しない

C++

…char* str, size_t len) { return std::string(str, len); } constexpr std::chrono::seconds operator"" s(unsigned long long n) { return std::chrono::seconds(n); } int main() { std::string a = "hello"s; // OK std::chrono::seconds b = 3s; // OK }

C++14規格レビュー勉強会を開催しました

C++

…は、2進数リテラル、constexprの制限緩和、変数テンプレートのレビューを担当しました。レビュー資料は、Slideshareで公開しています。 C++14 binary literals from Akira Takahashi C++14 relaxing constraints on constexpr from Akira Takahashi C++14 variable templates from Akira Takahashi 光成さんの資料: 配列の拡張 C…

C++14 文字列オブジェクトリテラルと時間リテラル

C++

…iterals { constexpr chrono::hours operator"" h(unsigned long long); constexpr chrono::duration<unspecified , ratio<3600,1>> operator"" h(long double); constexpr chrono::minutes operator"" min(unsigned long long); constexpr chrono::duration<…

C++14 std::complexの標準ユーザー定義リテラル

C++

…iterals { constexpr complex<long double> operator"" il(long double); constexpr complex<long double> operator"" il(unsigned long long); constexpr complex<double> operator"" i(long double); constexpr complex<double> operator"" i(unsigned long…

C++14のドラフト仕様更新

C++

…ラル(i) ヘッダのconstexpr対応 並行モデルの、out of thin airの規定 std::async()が返すfutureのデストラクタの挙動を明確化 削除(C++14リリース後のTechnical Specificationに移動): optional 実行時サイズの配列( int ar[n]; ) dynarray 編集履歴: 2013/10/16 21:33 : 変更内容に、「std::async()が返すfutureのデストラクタが、ブロッキングしない…

C++14 エイリアステンプレート版のType Traits

C++

…<class T> constexpr bool is_const_c = is_const<T>::value; 変数テンプレート版は現在、_cサフィックスを付けることが考えられていますが、valueを意味する_vサフィックスにすることや、コンセプトのUpperCamelケースにすることも検討されています。 この提案に対するフィードバックが求められていますので、意見がある人は言っておくといいと思います。 (時期的にC++14に入るかどうかはわかりません。) この最初の提案が…

C++14 変数テンプレート

C++

…pename T> constexpr T pi = T(3.1415926535897932385); // テンプレート定義された変数の使い方 // 円の面積を求める template<typename T> T area_of_circle_with_radius(T r) { return pi<T> * r * r; } 円周率は通常、組み込み型で表現できる範囲であれば、リテラルとして定義されます。しかし、多倍長浮動小数点数型のような場合には、リテラルでは表現できな…

Boost.Math 円周率は何桁でもいけた

C++

…et_pi() { constexpr T x = pi<T>(); std::cout << std::setprecision(std::numeric_limits<T>::digits10 + 1) << x << std::endl; } int main() { get_pi<float>(); get_pi<double>(); get_pi<long double>(); } 3.141593 3.141592653589793 3.1415926535897…