diff --git a/CMakeLists.txt b/CMakeLists.txt
index 30dc824..c6f0c15 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,30 +12,28 @@
 option(BUILD_BENCHMARK "Build benchmark" ON)
 option(COVERALLS "Generate coveralls data" OFF)
 
-set(INJA_INSTALL_INCLUDE_DIR "include")
 
+set(INJA_INSTALL_INCLUDE_DIR "include")
+set(INJA_PACKAGE_USE_EMBEDDED_JSON OFF)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
 
-if(CMAKE_COMPILER_IS_GNUCC)
-  add_compile_options(-Wall)
-endif()
 
+# For using the correct __cplusplus macro
 if(MSVC)
-  add_compile_options(/W4 /permissive- /utf-8 /Zc:__cplusplus)
+  add_compile_options(/utf-8 /Zc:__cplusplus)
 endif()
 
 
 add_library(inja INTERFACE)
 add_library(pantor::inja ALIAS inja)
 
+
 target_include_directories(inja INTERFACE
   $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
   $<INSTALL_INTERFACE:${INJA_INSTALL_INCLUDE_DIR}>
 )
-
 target_compile_features(inja INTERFACE cxx_std_11)
 
-set(INJA_PACKAGE_USE_EMBEDDED_JSON OFF)
 
 if(INJA_USE_EMBEDDED_JSON)
   find_package(nlohmann_json QUIET)
@@ -67,10 +65,11 @@
   endif()
 endif()
 
+
 target_link_libraries(inja INTERFACE ${INJA_SELECTED_JSON_LIBRARY})
 
+
 execute_process(COMMAND scripts/update_single_include.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
-# CMake: add_custom_command
 
 
 if(BUILD_TESTING AND INJA_BUILD_TESTS)
@@ -78,9 +77,14 @@
 
   add_executable(inja_test test/test.cpp)
   target_link_libraries(inja_test PRIVATE inja)
-
   add_test(inja_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/inja_test)
 
+  if(MSVC)
+    target_compile_options(inja_test PRIVATE /W4 /WX /permissive-)
+  else()
+    target_compile_options(inja_test PRIVATE -Wall -Wextra -pedantic -Werror)
+  endif()
+
 
   add_library(single_inja INTERFACE)
   target_compile_features(single_inja INTERFACE cxx_std_11)
diff --git a/include/inja/node.hpp b/include/inja/node.hpp
index 0fd9a41..43a6ef3 100644
--- a/include/inja/node.hpp
+++ b/include/inja/node.hpp
@@ -352,7 +352,7 @@
   BlockNode block;
   BlockNode *const parent;
 
-  explicit BlockStatementNode(BlockNode *const parent, const std::string& name, size_t pos) : StatementNode(pos), parent(parent), name(name) { }
+  explicit BlockStatementNode(BlockNode *const parent, const std::string& name, size_t pos) : StatementNode(pos), name(name), parent(parent) { }
 
   void accept(NodeVisitor& v) const {
     v.visit(*this);
diff --git a/include/inja/parser.hpp b/include/inja/parser.hpp
index a211d31..0c1f867 100644
--- a/include/inja/parser.hpp
+++ b/include/inja/parser.hpp
@@ -81,7 +81,7 @@
     auto function = operator_stack.top();
     operator_stack.pop();
 
-    for (size_t i = 0; i < function->number_args; ++i) {
+    for (int i = 0; i < function->number_args; ++i) {
       function->arguments.insert(function->arguments.begin(), arguments.back());
       arguments.pop_back();
     }
diff --git a/single_include/inja/inja.hpp b/single_include/inja/inja.hpp
index e1625cf..d719cc9 100644
--- a/single_include/inja/inja.hpp
+++ b/single_include/inja/inja.hpp
@@ -2705,7 +2705,7 @@
   BlockNode block;
   BlockNode *const parent;
 
-  explicit BlockStatementNode(BlockNode *const parent, const std::string& name, size_t pos) : StatementNode(pos), parent(parent), name(name) { }
+  explicit BlockStatementNode(BlockNode *const parent, const std::string& name, size_t pos) : StatementNode(pos), name(name), parent(parent) { }
 
   void accept(NodeVisitor& v) const {
     v.visit(*this);
@@ -2916,7 +2916,7 @@
     auto function = operator_stack.top();
     operator_stack.pop();
 
-    for (size_t i = 0; i < function->number_args; ++i) {
+    for (int i = 0; i < function->number_args; ++i) {
       function->arguments.insert(function->arguments.begin(), arguments.back());
       arguments.pop_back();
     }
diff --git a/test/test-functions.cpp b/test/test-functions.cpp
index e920ff2..e0f3a6e 100644
--- a/test/test-functions.cpp
+++ b/test/test-functions.cpp
@@ -208,7 +208,7 @@
   });
 
   std::string greet = "Hello";
-  env.add_callback("double-greetings", 0, [greet](inja::Arguments args) { return greet + " " + greet + "!"; });
+  env.add_callback("double-greetings", 0, [greet](inja::Arguments) { return greet + " " + greet + "!"; });
 
   env.add_callback("multiply", 2, [](inja::Arguments args) {
     double number1 = args.at(0)->get<double>();
@@ -228,11 +228,11 @@
     return number1.length();
   });
 
-  env.add_void_callback("log", 1, [](inja::Arguments args) {
-    int a = 2;
+  env.add_void_callback("log", 1, [](inja::Arguments) {
+    
   });
 
-  env.add_callback("multiply", 0, [](inja::Arguments args) { return 1.0; });
+  env.add_callback("multiply", 0, [](inja::Arguments) { return 1.0; });
 
   CHECK(env.render("{{ double(age) }}", data) == "56");
   CHECK(env.render("{{ half(age) }}", data) == "14");
