Skip to content

Instantly share code, notes, and snippets.

@jefftrull
jefftrull / test_ub.cpp
Created March 5, 2016 00:14
Simple test of signed overflow UB
#include <iostream>
#include <cstdint>
#include <limits>
int main(int argc, char **argv) {
std::int32_t i = std::numeric_limits<int32_t>::max();
i++; // signed overflow
if (i < 0) {
std::cerr << "i<0 and i=" << i << "\n"; // "expected" or "safe" result (-O1)
} else {
@jefftrull
jefftrull / as_string.cpp
Created May 18, 2015 19:58
Demonstration of apparent need for as_string when synthesizing a sequence of characters to a std::string
#include <string>
#include <iostream>
#include <sstream>
#define BOOST_SPIRIT_USE_PHOENIX_V3
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
int main() {
@jefftrull
jefftrull / gist:928eac7d47e61f5d9634
Created April 11, 2015 21:09
Demonstration of using a Qi symbol table with a Lex-based Spirit parser, case-insensitive
#include <string>
#include <boost/spirit/include/lex_lexertl.hpp>
#include <boost/spirit/include/lex_lexertl_position_token.hpp>
#include <boost/spirit/include/support_istream_iterator.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
#include <boost/algorithm/string/case_conv.hpp>
@jefftrull
jefftrull / gist:40a441bdb75365b2bf75
Last active August 29, 2015 14:18
An attempt to construct a functional-style function value-returning function from a mutating function, using Phoenix
// test transforming a mutating function into a value-returning function via Phoenix
// i.e., void f(T& a) -> T f(T const& a) or T F(T a)
#define BOOST_SPIRIT_USE_PHOENIX_V3
#include <iostream>
#include <string>
#include <boost/spirit/include/phoenix.hpp>
#include <boost/algorithm/string/case_conv.hpp>
@jefftrull
jefftrull / gist:25fba71dae683bc48f74
Created February 17, 2015 06:58
Demo of getting a dense vector from a row of a sparse matrix in Eigen
#include <iostream>
#include <vector>
#include <Eigen/Dense>
#include <Eigen/Sparse>
int main() {
using namespace std;
using namespace Eigen;
vector<Triplet<double> > tripletList;
@jefftrull
jefftrull / gist:561b4e51d03bb3df3f86
Created December 4, 2014 10:30
attempt to partially specialize class by defining a member function template to be different for a certain *class* template parameters
#include <typeinfo>
#include <string>
#include <iostream>
template<typename T> struct A {
template<typename U>
A(U u) {
std::cout << std::string("class template parameter generic, ctor template parameter ") + typeid(u).name() << std::endl;
}
};
@jefftrull
jefftrull / gist:131626a0dc13238510c2
Created December 3, 2014 18:45
demo "partial" specialization of a class template with a member function template
#include <typeinfo>
#include <string>
#include <iostream>
template<typename T> struct A {
template<typename U>
void foo(U u) {
std::cout << std::string("class template parameter generic, function template parameter ") + typeid(u).name() << std::endl;
}
};
@jefftrull
jefftrull / gist:ff6083e2e92fdabb62f6
Last active August 29, 2015 14:06
Attempt to understand how void_t described by Walter Brown works
#include <type_traits>
#include <iostream>
using namespace std;
template< class... > struct voider { using type = void; };
template< class... T0toN > using void_t = typename voider<T0toN...>::type;
// does NOT work
@jefftrull
jefftrull / gist:6131ffeb35ef72ef348f
Last active August 29, 2015 14:06
void_t usage test case
#include <type_traits>
#include <iostream>
using namespace std;
template<class... > using void_t = void;
template< class, class = void >
struct has_type_member : false_type { };
@jefftrull
jefftrull / gist:5625b77c0f86c439f29f
Created August 15, 2014 06:05
Replacement for harmonic_oscillator.cpp with Eigen Matrix as state type and necessary changes made
/*
Copyright 2010-2012 Karsten Ahnert
Copyright 2011-2013 Mario Mulansky
Copyright 2013 Pascal Germroth
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or
copy at http://www.boost.org/LICENSE_1_0.txt)
*/