タグ

ブックマーク / in-neuro.hatenablog.com (3)

  • 可変長テンプレートでもstd::source_locationを使いたい! - in neuro

    この記事はC++アドベントカレンダー2021の記事です。 qiita.com 小ネタですが今日の分が埋まっていなかったので。 std::source_locationとは std::source_locationは、その名の通りソースコード中の位置を表す情報が入った構造体です。C++20以降で使うことができ、<source_location>で定義されています。 https://cpprefjp.github.io/reference/source_location/source_location.html __FILE__や__LINE__のモダンないいかんじのバージョンだ、という認識でだいたいOKです。 この構造体は普通、std::source_location::current()で作ります。この関数は呼ばれた位置を示すstd::source_locationを返します。デフォルトコ

    可変長テンプレートでもstd::source_locationを使いたい! - in neuro
  • Static Initialization Order Fiasco - in neuro

    これはC++アドベントカレンダーが埋まっていなかったので急遽書こうと思い立って急いで寝る前にバーっと書いてたら気づいたときには2時を回っていた記事です。何かあったら教えるか見逃してください。 そもそも何の話? Static Initialization Order Fiascoとは、異なる翻訳単位で初期化される static storage duration を持つ変数の初期化順序が不定であるために起きる問題の名称です。ちなみに"fiasco"は、weblioによると「(野心的な企てがこっけいな結果で終わるような)大失敗」のことで、イタリア語の「瓶」が語源だそうです。ガラス製品作りに失敗した材料で瓶を作ったことからだとか。おしゃれな言い回しをしますね。問題自体は深刻なんですが。 どういう問題なのか順に説明していきましょう。まずstatic storage durationを持つ変数とは何ぞ

    Static Initialization Order Fiasco - in neuro
  • variadic templateで遊ぶ - in neuro

    この記事は、C++ Advent Calendar 2016の5日目の記事です。 まえがき C++11以降、C++では可変長テンプレートなるものが使えるようになった。要するに0個以上の任意個の型引数を取れるテンプレートである。std::tupleなどでお馴染みだろう。 この記事では、可変長テンプレートを使って様々な(役に立たない)コードを書く予定だ。 事の発端は、以前以下のようなものを作ろうと思い立ってしまったことである。 何をするクラスかというと、template template引数として可変長テンプレートを取るクラスを取り、後続の可変長テンプレート型を逆順にして格納するものだ。 template<template<typename ... T> class hoge, typename ... T_args> struct reverse { typedef hoge</* reve

    variadic templateで遊ぶ - in neuro
    MonMonMon
    MonMonMon 2017/03/31
    variadic template
  • 1