constexpr の検索結果:

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…

初期値が入力された要素数を取得する

C++

… main() { constexpr std::size_t size = 4; int data[size] = {1, 2, 3}; // 配列の要素数は4だが、初期値が入力されたのは3個 for (std::size_t i = 0; i < size; ++i) { std::cout << data[i] << std::endl; } } 1 2 3 0その型の初期値が「使用しない値」や「無効値」として使用できるかはわからないので、こういった状況では、おとなしく…

C++1y 軽量Concept

C++

…た定数式の機能であるconstexprと組み合わせて考え直した案です。 まず、2つの値のうち、小さな値を返すmin()関数を考えてみます。 template <class T> T min(T a, T b) { return a < b ? a : b; } min()関数に渡される任意の型Tは、演算子で比較可能である必要があります。 C++11に提案されていたConceptでは、クラス定義のような構文で、型Tの要件を定義していました。 auto concept LessT…

Boostをサポート環境外で動かす

C++

…_NO_CXX11_CONSTEXPR // constexprを持っていない #define BOOST_NO_CXX11_NOEXCEPT // noexceptを持っていない #endif #endif // MY_BOOST_CONFIG_INCLUDE このように設定したヘッダファイルは、Boostのヘッダをインクルードする前に必ずインクルードします。 Boost.Configの設定マクロは、ここでは紹介しきれないので、ドキュメントを参照してください。 C++03対…

C++1y - optionalの提案

C++

…ostはnone。 constexpr対応 入出力ストリームの演算子を提供しない emplaceによる構築。Boostではin_place()関数。 入出力ストリームを提供しないのは、現状その振る舞いについて合意がとれていないからです。 たとえば、optionalを出力する場合、無効値だったらどういう振る舞いになるのか。以下の選択肢が考えられます: 未定義の振る舞いにする 何も出力しない 特殊な文字列を出力する 有効値の場合に"OPT[3]"、無効値の場合に"OPT[]"とい…

C++1y - 標準ユーザー定義リテラルの提案

C++

…f(3ms); // 3ミリ秒 このほかには、2進数リテラルもあります。 #include <suffix_binary> using namespace std::suffixes::binary; auto x = 100b; // int x = 4 これらの多くのリテラルはconstexprで定義されるので、リテラル値の計算や型変換はコンパイル時に行われます。 N3402 User-defined Literals for Standard Library Types

C++1y - 非型テンプレートパラメータの制限緩和に関する提案

C++

…++11で導入されたconstexprによって、コンパイル時により多くのことができるようになりました。constexprでできるようになったものの一つに「constexprなコンストラクタを持ち、その他細かい条件を満たすクラスは、コンパイル時定数になることができる」というのがあります。 struct C { constexpr C(int v) : v(v) { } int v; }; int main() { constexpr C c(3); int ar[c.v]; /…

C++Now! 2012に参加してきました

C++

…メタプログラミングとconstexprを組み合わせたコンパイル時構文解析ライブラリで、Boostにもレビューリクエストが提出されています。私はそのレビューリクエストに対して「ボレロ村上さん id:boleros の作っているSproutというライブラリもあるんだよ」ということをメーリングリストに投げたりしていたこともあって、今回のC++Now!では、日本人プログラマの活動を伝える意味でも、Metaparseのセッション中のどこかでSproutのことを紹介しよう、ということを目…

Boost.勉強会 #8 大阪

C++

…寧に解説されていて、constexprの研究が順調に進んでいるのがよくわかりました。 中3女子が狂える本当に気持ちのいい constexpr View more presentations from Genya Murakami 現在Boostに、コンパイル時にprintfの正当性チェックなどに使用できるMetaparseというテンプレートメタプログラミングのライブラリが提案されています。私がその提案に対して「村上さんが作っているSprout.WeedはSpirit.Qiのよ…

Boost.Fusionのアダプト機構を言語サポートする提案

C++

…ble x, y; constexpr Complex(double x, double y) noexcept : x{x}, y{y} {} }; constexpr bool operator==(Complex a, Complex b) noexcept { return std::meta::members(a).value == std::meta::members(b).value; } 他にも、基本クラスの型リストを取得するstd::meta::bases(…

Boost.勉強会 #7を開催しました

C++

…ラリは、C++11のconstexpr機能を使い倒したもので、コンパイル時パーサーコンビネータやレイトレーシングなどを書かれています。めっちゃカッコイイ。 constexprを限界まで使い倒して思うところがいろいろあるようなので、ぜひ今後標準への提案までつなげていってもらいたいですね。もちろん私もできる限り協力します! 次回あたりは、もう一人の中3女子にも来て欲しいですね(id:RiSK)。 懇親会について。 今回は12月開催だったので、懇親会は忘年会として開催しました。 会…

『プログラミングの魔導書 Vol.2』予約開始!

…紹介(菊池 正史) constexpr入門(江添 亮) boost::seriarizationの紹介 後編(近藤 貴俊) Boostを使い倒してTwitterクライアントを作る(柏田 知洋) ご予約は以下のページから承っております。 株式会社ロングゲート - プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.2 今後も同様の特集を組んでまいりますので、プログラミング言語の"進化"について一言ある方は、ぜひ下記の連絡先からコンタクトいただければと…

constexprを使用してテンプレートに浮動小数点定数を渡す

C++

… { static constexpr double value = 3.14; }; template <const double& r> struct circle_area { static constexpr double value = r * r * pi::value; }; struct radius { static constexpr double value = 2.5; }; int main() { constexpr double result =…

constexpr関数での数値計算はコンパイルが速い?

C++

constexpr メタプログラミング:「速度が欲しいか… ならばくれてやる!」 GCC以外もがんばって実装してほしい。

constexprな配列

C++

… main() { constexpr int ar[] = {1, 2, 3}; STATIC_ASSERT(ar[0] == 1); STATIC_ASSERT(ar[1] == 2); STATIC_ASSERT(ar[2] == 3); } std::arrayはconstexpr対応してないのでまだできない(N3225)。 #include <array> #define STATIC_ASSERT(expr) static_assert(expr, #expr) …

GCC 4.6でconstexpr動いた!

C++

まだこれしか動かしてないけど、とりあえず満足。 constexpr double get_pi() { return 3.14159265358979323846; } static_assert(get_pi() == 3.14159265358979323846, "not same"); int main(){}

constexpr関数でstatic_assert書けないかなーと足掻いてみた

C++

constexpr関数には 「関数の本体がreturn文のみで構成されなければならない」 という制限があるので、通常の方法ではパラメータチェックができません。 カンマ演算子を使えばなんとかできたりしないかな、と思ってGCC 4.5でこんなのを書いてみましたが int main() { return (static_assert(true, "failed"), 0); } main.cpp: In function 'int main()': main.cpp:3:10: e…

C++0x constexpr関数でのconst参照パラメータを許可

C++

constexpr関数でconst参照パラメータが使用できるようになりました。 この変更により、std::min、 std::max、std::pairの2引数をとるコンストラクタ、std::minmaxといった より多くの関数をconstexprにすることができるようになります。 template <class T> constexpr const T& max(const T& a, const T& b); template <class T1, class T2> s…

GCC 4.5から使用可能なC++0x機能

… // 4.Raw String Literal std::string path = R"[C:\a.txt]"; std::cout << path << std::endl; // 「C:\a.txt」と出力される } constexprもこっそり入ってますが、キーワードがあるだけのようです。 十分な実装はできてるけどGCC 4.5には間に合わなかったそうです。(パッチはあるらしい) 追記: 3つではなく4つでした。 Raw String Literalを追記しました。

C++0x 標準ライブラリのconstexpr対応

C++

C++0xのconstexprは、コンストラクタやその他のメンバ関数にも指定することができます。 これがあると、 constexpr pair<int, int> p(1, 2); のようにconstexprを付けて定義した変数をコンパイル時定数として扱うことができ、 pairのoperator+がconstexprだったりすると constexpr pair<int, int> r = p1 + p2; も定数式になります。 このような対応を、C++0xの標準ライブラリでも…

C++0x 最低限推奨される数

C++

…のをピックアップ。 constexprの再帰数[512] テンプレートの再帰数[17 → 1024] プレースホルダー[_1〜_10] テンプレートの再帰数がかなり増えましたね。 (それでも足りないという声も聞きますが) 可変引数テンプレートを最低何個まで保証する、みたいなのはなくていいのだろうか。 追記:「引数の数」でOKですね。 タイトル修正しました: 「最低限保証される数」→「最低限推奨される数」 保証ではないですね。 However, these quantities…

なぜ標準でπがないんだろう

C++

<cmath>にはstd::cosやstd::sinといった関数はありますが、 πを表す定数が用意されていません。 M_PIがそうかなーとも思ったのですが、これは非標準のようです。 仕方がないのでこんなの用意してますが namespace math { inline double pi() { return 3.1415926535897932384626433832795; } } これくらいは標準で用意してほしいですね。 C++0xならconstexprあるんだし。

ユーザー定義リテラル + constexprの問題

C++

comp.std.c++ - User defined literals constexprなユーザー定義リテラルで変な値が渡されたらstatic_assertでエラーにしたいんだけど constexpr関数は「1つのreturn文のみで構成されなければならない」という制限があるからできないよね、という問題。 ↑の例ではTrueコンセプトでなんとかしてるみたいですが、constexpr関数内でもstatic_assertくらいは使いたいとこです。

constexprの問題点

C++

・constexpr関数中のコンパイル時計算エラー constexpr関数中で1/0としたときはエラー(ill-formed)になるべきだけど 今だとそのへんが回りくどい言い回しになっててよくわからん。 ・constexprメンバ関数は宣言と定義を分けられない? 今のドラフトだと以下のように書かれていて constexpr指定子は、オブジェクト、関数、関数テンプレートの定義、あるいはリテラル型の静的データメンバの宣言だけに適用されるものとします。 宣言ではなく定義のほうにco…

C++WGアドホック会議レポート

C++

…ない><) 【70.constexprの再帰を認めるべき】 反対意見なく、これもOK。 【36〜38.inline namespace関係】 namespace foo{ inline namespace bar{ int hoge; } int hoge; } と --------foobar.cpp--------------- namespace foo{ inline namespace bar{ int hoge; } } --------foo.cpp------…