Skip to content

Instantly share code, notes, and snippets.

@jefftrull
jefftrull / gist:8910059
Created February 10, 2014 03:50
queue<shared_ptr<SimpleStruct>> is not nothrow move constructible
#include <queue>
#include <memory>
struct Foo {
int i;
};
using namespace std;
static_assert(is_nothrow_move_constructible<shared_ptr<Foo>>::value,
"Shared pointer is not move constructible");
@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: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: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: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: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: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: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 / 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() {
class Cell < ActiveRecord::Base
composed_of :extent, :class_name => "Vector", :mapping => %w(extent_x extent_y extent_z), :constructor => Proc.new { |x,y,z| Vector.elements([x, y, z]) }
def as_json(options={})
{:name => self.name, :id => self.id, :extent => [self.extent_x, self.extent_y, self.extent_z]}
end
end