Add a .clang-format config file and reformat all C++ source code using that. Also added some documentation on the preferred style in CONTRIBUTING.md.
diff --git a/include/fruit/impl/meta/vector.h b/include/fruit/impl/meta/vector.h
index 84bd602..a94a21d 100644
--- a/include/fruit/impl/meta/vector.h
+++ b/include/fruit/impl/meta/vector.h
@@ -4,9 +4,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *     http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -18,10 +18,10 @@
 #define FRUIT_META_VECTOR_H
 
 #include <fruit/impl/meta/basics.h>
-#include <fruit/impl/meta/logical_operations.h>
-#include <fruit/impl/meta/numeric_operations.h>
 #include <fruit/impl/meta/eval.h>
 #include <fruit/impl/meta/fold.h>
+#include <fruit/impl/meta/logical_operations.h>
+#include <fruit/impl/meta/numeric_operations.h>
 #include <functional>
 
 namespace fruit {
@@ -46,7 +46,7 @@
 struct GenerateIntSequenceEvenHelper {
   template <typename Half>
   struct apply;
-  
+
   template <int... ns>
   struct apply<Vector<Int<ns>...>> {
     using type = Vector<Int<ns>..., Int<sizeof...(ns) + ns>...>;
@@ -56,7 +56,7 @@
 struct GenerateIntSequenceOddHelper {
   template <typename Half>
   struct apply;
-  
+
   template <int... ns>
   struct apply<Vector<Int<ns>...>> {
     using type = Vector<Int<ns>..., Int<sizeof...(ns)>, Int<sizeof...(ns) + 1 + ns>...>;
@@ -66,9 +66,8 @@
 struct GenerateIntSequence {
   template <typename N>
   struct apply {
-    using type = If(Bool<(N::value % 2) == 0>,
-                    GenerateIntSequenceEvenHelper(GenerateIntSequence(Int<N::value/2>)),
-                    GenerateIntSequenceOddHelper(GenerateIntSequence(Int<N::value/2>)));
+    using type = If(Bool<(N::value % 2) == 0>, GenerateIntSequenceEvenHelper(GenerateIntSequence(Int<N::value / 2>)),
+                    GenerateIntSequenceOddHelper(GenerateIntSequence(Int<N::value / 2>)));
   };
 };
 
@@ -87,18 +86,17 @@
   struct AlwaysFalseBool {
     constexpr static bool value = false;
   };
-  
+
   template <bool... bs>
   struct BoolVector;
-  
+
   template <typename T, typename V>
   struct apply;
 
   template <typename T, typename... Ts>
   struct apply<T, Vector<Ts...>> {
-    using type = Bool<!std::is_same<BoolVector<AlwaysFalseBool<Ts>::value...>,
-                                    BoolVector<std::is_same<T, Ts>::value...>
-                                    >::value>;
+    using type = Bool<
+        !std::is_same<BoolVector<AlwaysFalseBool<Ts>::value...>, BoolVector<std::is_same<T, Ts>::value...>>::value>;
   };
 };
 
@@ -110,15 +108,14 @@
   struct AlwaysTrueBool {
     constexpr static bool value = true;
   };
-  
+
   template <bool... bs>
   struct BoolVector;
-  
+
   template <typename... Ts, typename V2>
   struct apply<Vector<Ts...>, V2> {
-	using type = Bool<std::is_same<BoolVector<AlwaysTrueBool<Ts>::value...>, 
-		                           BoolVector<Id<typename IsInVector::template apply<Ts, V2>::type>::value...>
-	                               >::value>;
+    using type = Bool<std::is_same<BoolVector<AlwaysTrueBool<Ts>::value...>,
+                                   BoolVector<Id<typename IsInVector::template apply<Ts, V2>::type>::value...>>::value>;
   };
 };
 
@@ -165,7 +162,7 @@
 struct TransformVector {
   template <typename V, typename F>
   struct apply;
-  
+
   template <typename... Ts, typename F>
   struct apply<Vector<Ts...>, F> {
     using type = Vector<Eval<typename F::template apply<Ts>::type>...>;
@@ -177,7 +174,7 @@
   struct apply {
     using type = T;
   };
-  
+
   template <typename ToReplace, typename NewElem>
   struct apply<ToReplace, NewElem, ToReplace> {
     using type = NewElem;
@@ -196,7 +193,7 @@
 struct FoldVector {
   template <typename V, typename F, typename InitialValue>
   struct apply;
-  
+
   template <typename... Ts, typename F, typename InitialValue>
   struct apply<Vector<Ts...>, F, InitialValue> {
     using type = Fold(F, InitialValue, Ts...);
@@ -216,7 +213,7 @@
   struct apply<Vector<Types...>, N, Vector<Indexes...>> {
     template <typename... RemainingTypes>
     static Vector<RemainingTypes...> f(AlwaysVoidPtr<Indexes>..., RemainingTypes*...);
-    
+
     using type = decltype(f((Types*)nullptr...));
   };
 };
@@ -225,10 +222,9 @@
   template <typename V, typename T>
   struct apply {
     using N = Int<Eval<VectorSize(V)>::value - 1>;
-    using type = IsSame(VectorRemoveFirstN(V, N),
-                        Vector<T>);
+    using type = IsSame(VectorRemoveFirstN(V, N), Vector<T>);
   };
-  
+
   template <typename T>
   struct apply<Vector<>, T> {
     using type = Bool<false>;
@@ -242,12 +238,12 @@
   struct apply {
     using type = Vector<>;
   };
-  
+
   template <typename T, typename... Ts>
   struct apply<Vector<T, Ts...>> {
     using type = PushFront(VectorRemoveNone(Vector<Ts...>), T);
   };
-  
+
   template <typename... Ts>
   struct apply<Vector<None, Ts...>> {
     using type = VectorRemoveNone(Vector<Ts...>);
@@ -257,7 +253,7 @@
 struct ConstructErrorWithArgVectorHelper {
   template <typename ErrorTag, typename ArgsVector, typename... OtherArgs>
   struct apply;
-  
+
   template <typename ErrorTag, typename... Args, typename... OtherArgs>
   struct apply<ErrorTag, Vector<Args...>, OtherArgs...> {
     using type = ConstructError(ErrorTag, OtherArgs..., Args...);
@@ -275,5 +271,4 @@
 } // namespace impl
 } // namespace fruit
 
-
 #endif // FRUIT_META_VECTOR_H