add warnings for clang and fix them
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");