Skip to content

Instantly share code, notes, and snippets.

View ldionne's full-sized avatar

Louis Dionne ldionne

View GitHub Profile
@ldionne
ldionne / moved.md
Last active December 28, 2015 15:29
Comparison of techniques to implement compile-time logical conjunction and disjunction.
@ldionne
ldionne / moved.md
Last active December 28, 2015 16:29
Comparison of techniques to implement lookup in compile-time structures.
@ldionne
ldionne / moved.md
Last active December 28, 2015 17:59
Comparison between different ways of instantiating the same number of templates.
/*!
* Barebones zip_with and fmap for std::tuple and std::integer_sequence.
*
* Copyright Louis Dionne 2014
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE.md or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*/
// Compiled with:
@ldionne
ldionne / benchmark.hpp
Last active August 29, 2015 14:07
Support header for runtime benchmarks with the Benchcc gem.
/*
@copyright Louis Dionne 2014
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
*/
#ifndef BOOST_HANA_BENCHMARK_MEASURE_HPP
#define BOOST_HANA_BENCHMARK_MEASURE_HPP
#include <chrono>
@ldionne
ldionne / when.md
Created October 7, 2014 14:44
NXXXX: Flexible partial specialization with `when` and `when_valid`

Flexible partial specialization with when and when_valid

  • Document Number: NXXXX
  • Date: 2014-10-07
  • Programming Language C++, Library Evolution Working Group
  • Reply-to: Louis Dionne ldionne.2@gmail.com

Introduction

@ldionne
ldionne / no_adl.cpp
Created March 5, 2015 21:11
Make sure Hana avoids undesirable instantiations because of ADL.
template <typename ...T>
struct _tuple_t {
struct _;
};
template <typename ...T>
struct _tuple_t<T...>::_
: _tuple_t<T...>
{ };
@ldionne
ldionne / compile_time_printf.cpp
Created March 12, 2015 01:00
Create a printf-style format string at compile-time
#include <type_traits>
#include <boost/hana.hpp>
#include <boost/hana/ext/std/type_traits.hpp>
#include <iostream>
using namespace hana;
constexpr auto formats = hana::make_map(
hana::make<hana::Pair>(hana::type<int>, hana::string<'%', 'd'>),
hana::make<hana::Pair>(hana::type<float>, hana::string<'%', 'f'>),
› ~/code/gcc5/bin/g++ -std=c++1y ~/code/hana/test/worksheet.cpp
/Users/ldionne/code/hana/test/worksheet.cpp: In substitution of ‘template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type [with bool _Cond = std::is_same<T, T>{}(); _Tp = void]’:
/Users/ldionne/code/hana/test/worksheet.cpp:1411:25: required from here
/Users/ldionne/code/hana/test/worksheet.cpp:1408:50: in constexpr expansion of ‘((std::integral_constant<bool, true>*)(& std::is_same<T, T>()))->std::integral_constant<_Tp, __v>::operator()<bool, true>()’
/Users/ldionne/code/hana/test/worksheet.cpp:1411:25: internal compiler error: in cxx_eval_call_expression, at cp/constexpr.c:1358
auto ICE_HERE = __func__;
^
/Users/ldionne/code/hana/test/worksheet.cpp:1411:25: internal compiler error: Abort trap: 6
g++: internal compiler error: Abort trap: 6 (program cc1plus)
@ldionne
ldionne / GSoC2015.md
Last active August 29, 2015 14:17
Proposition for GSoC 2015 with Boost

Abstract

The goal of this project is to improve the compile-time associative data structures present in the Hana C++14 metaprogramming library. I aim to provide a richer interface than what is currently available and also to improve the compile-time performance of those data structures, while keeping the runtime performance on-par with non-naive hand-written code.

Background information