diff --git a/src/analysis/AnalysisBase.h b/src/analysis/AnalysisBase.h
index 6fe0bd1458dc9550d952f5d0197f534773efa1b4..594f8f0b0b01bbb3a15cfd894f2f14c3a33f9f39 100644
--- a/src/analysis/AnalysisBase.h
+++ b/src/analysis/AnalysisBase.h
@@ -56,7 +56,7 @@ protected:
   AnalysisBase* my_input_data;
 public:
   static void registerKeywords( Keywords& keys );
-  AnalysisBase(const ActionOptions&);
+  explicit AnalysisBase(const ActionOptions&);
 /// These are required because we inherit from both ActionAtomistic and ActionWithArguments
   void lockRequests();
   void unlockRequests();
diff --git a/src/analysis/EuclideanDissimilarityMatrix.cpp b/src/analysis/EuclideanDissimilarityMatrix.cpp
index 9dedf1a6d29984bafc3c96c754aa8b395b544554..85371822bbf07125dd2ec2f3d852eb7222566983 100644
--- a/src/analysis/EuclideanDissimilarityMatrix.cpp
+++ b/src/analysis/EuclideanDissimilarityMatrix.cpp
@@ -44,7 +44,7 @@ private:
   Matrix<double> dissimilarities;
 public:
   static void registerKeywords( Keywords& keys );
-  EuclideanDissimilarityMatrix( const ActionOptions& ao );
+  explicit EuclideanDissimilarityMatrix( const ActionOptions& ao );
 /// Do the analysis
   void performAnalysis();
 /// This ensures that classes that use this data know that dissimilarities were set
diff --git a/src/analysis/FarthestPointSampling.cpp b/src/analysis/FarthestPointSampling.cpp
index 0a0d7341dd030c894c4109d6e2add2966136410c..9c977972ad7b4eed0c017069370fb7999edb1344 100644
--- a/src/analysis/FarthestPointSampling.cpp
+++ b/src/analysis/FarthestPointSampling.cpp
@@ -40,7 +40,7 @@ private:
   unsigned seed;
 public:
   static void registerKeywords( Keywords& keys );
-  FarthestPointSampling( const ActionOptions& ao );
+  explicit FarthestPointSampling( const ActionOptions& ao );
   void selectLandmarks();
 };
 
diff --git a/src/analysis/LandmarkSelectionBase.h b/src/analysis/LandmarkSelectionBase.h
index e809d2a1b683e4f1128af811ac0c5e236b2cf73f..4b29be5027059a2f2bfc7afbe51418b1e96ef2c5 100644
--- a/src/analysis/LandmarkSelectionBase.h
+++ b/src/analysis/LandmarkSelectionBase.h
@@ -45,7 +45,7 @@ protected:
   void voronoiAnalysis( const std::vector<unsigned>& myindices, std::vector<double>& lweights, std::vector<unsigned>& assignments ) const ;
 public:
   static void registerKeywords( Keywords& keys );
-  LandmarkSelectionBase( const ActionOptions& ao );
+  explicit LandmarkSelectionBase( const ActionOptions& ao );
 /// Return the number of data points
   unsigned getNumberOfDataPoints() const ;
 /// Return the index of the data point in the base class
diff --git a/src/analysis/LandmarkStaged.cpp b/src/analysis/LandmarkStaged.cpp
index 763baa8e7e4d0fc0bce688305f2b4c4ad8e51117..f6ee5daf42e56601bc699b58e728a0d3aa2653f6 100644
--- a/src/analysis/LandmarkStaged.cpp
+++ b/src/analysis/LandmarkStaged.cpp
@@ -43,7 +43,7 @@ private:
   double gamma;
 public:
   static void registerKeywords( Keywords& keys );
-  LandmarkStaged( const ActionOptions& ao );
+  explicit LandmarkStaged( const ActionOptions& ao );
   void selectLandmarks();
 };
 
diff --git a/src/analysis/OutputColvarFile.cpp b/src/analysis/OutputColvarFile.cpp
index 28dd12527328a4b94f033535b3832df564803ecc..3984481e43d4e61122740b78bb7c5f761cb24500 100644
--- a/src/analysis/OutputColvarFile.cpp
+++ b/src/analysis/OutputColvarFile.cpp
@@ -52,7 +52,7 @@ private:
   std::vector<std::string> req_vals;
 public:
   static void registerKeywords( Keywords& keys );
-  OutputColvarFile( const ActionOptions& );
+  explicit OutputColvarFile( const ActionOptions& );
   void performTask( const unsigned&, const unsigned&, MultiValue& ) const { plumed_error(); }
   void performAnalysis();
 };
diff --git a/src/analysis/PrintDissimilarityMatrix.cpp b/src/analysis/PrintDissimilarityMatrix.cpp
index 168a2b8a61c9a1b45d9a04c8e6dd0a363040575c..09b1401923b70e1f8905d4a9ed21b78501ab2a15 100644
--- a/src/analysis/PrintDissimilarityMatrix.cpp
+++ b/src/analysis/PrintDissimilarityMatrix.cpp
@@ -42,7 +42,7 @@ private:
   std::string fname;
 public:
   static void registerKeywords( Keywords& keys );
-  PrintDissimilarityMatrix( const ActionOptions& ao );
+  explicit PrintDissimilarityMatrix( const ActionOptions& ao );
   void performAnalysis();
   void performTask( const unsigned&, const unsigned&, MultiValue& ) const { plumed_error(); }
 };
diff --git a/src/analysis/ReadDissimilarityMatrix.cpp b/src/analysis/ReadDissimilarityMatrix.cpp
index fa0e08c81af1df00e341170d0b90c511d10992cb..c6c8c28ab6f594a38e1a9e2e78d417c34839e795 100644
--- a/src/analysis/ReadDissimilarityMatrix.cpp
+++ b/src/analysis/ReadDissimilarityMatrix.cpp
@@ -51,7 +51,7 @@ private:
   std::vector<double> weights;
 public:
   static void registerKeywords( Keywords& keys );
-  ReadDissimilarityMatrix( const ActionOptions& ao );
+  explicit ReadDissimilarityMatrix( const ActionOptions& ao );
   unsigned getNumberOfDataPoints() const ;
 // Return the index of the data point in the base class
   unsigned getDataPointIndexInBase( const unsigned& idata ) const ;
diff --git a/src/analysis/ReselectLandmarks.cpp b/src/analysis/ReselectLandmarks.cpp
index 326018091ab94794c7a51fc9248afd3fc62e68b1..c791353371a4d42e7c00493138003297db2ebc7e 100644
--- a/src/analysis/ReselectLandmarks.cpp
+++ b/src/analysis/ReselectLandmarks.cpp
@@ -42,7 +42,7 @@ private:
   LandmarkSelectionBase* mylandmarks;
 public:
   static void registerKeywords( Keywords& keys );
-  ReselectLandmarks( const ActionOptions& ao );
+  explicit ReselectLandmarks( const ActionOptions& ao );
   void selectLandmarks();
 };
 
diff --git a/src/analysis/SelectRandomFrames.cpp b/src/analysis/SelectRandomFrames.cpp
index 5dc4e11b34f0d4f30501c51c59cccd222cd84572..7ec712fdfb1fc65a70e13c226a56ae12511d15df 100644
--- a/src/analysis/SelectRandomFrames.cpp
+++ b/src/analysis/SelectRandomFrames.cpp
@@ -40,7 +40,7 @@ private:
   unsigned seed;
 public:
   static void registerKeywords( Keywords& keys );
-  SelectRandomFrames( const ActionOptions& ao );
+  explicit SelectRandomFrames( const ActionOptions& ao );
   void selectLandmarks();
 };
 
diff --git a/src/analysis/WhamHistogram.cpp b/src/analysis/WhamHistogram.cpp
index 4d0616bf05d0158ddd899f1ff3afda312c73a706..2f10f39710ccf1107230b7b4a28d8ae2d5d67aa0 100644
--- a/src/analysis/WhamHistogram.cpp
+++ b/src/analysis/WhamHistogram.cpp
@@ -37,7 +37,7 @@ This can be used to output the a histogram using the weighted histogram techniqu
 class WhamHistogram : public ActionShortcut {
 public:
   static void registerKeywords( Keywords& keys );
-  WhamHistogram( const ActionOptions& );
+  explicit WhamHistogram( const ActionOptions& );
 };
 
 PLUMED_REGISTER_ACTION(WhamHistogram,"WHAM_HISTOGRAM")
diff --git a/src/analysis/WhamWeights.cpp b/src/analysis/WhamWeights.cpp
index c9c43069c631de732eeb148c8250977194d1676b..8aedd95f85d69d2c1a7af1b551085754827f280f 100644
--- a/src/analysis/WhamWeights.cpp
+++ b/src/analysis/WhamWeights.cpp
@@ -37,7 +37,7 @@ This can be used to output the data that has been stored in an Analysis object.
 class WhamWeights : public ActionShortcut {
 public:
   static void registerKeywords( Keywords& keys );
-  WhamWeights( const ActionOptions& );
+  explicit WhamWeights( const ActionOptions& );
 };
 
 PLUMED_REGISTER_ACTION(WhamWeights,"WHAM_WEIGHTS")
diff --git a/src/dimred/DimensionalityReductionBase.h b/src/dimred/DimensionalityReductionBase.h
index 2dc76a380794081822c81a9e9e9bf8d0f8fbec91..5f0772824fbe5b2bcdb99e41d732b92a94a363f1 100644
--- a/src/dimred/DimensionalityReductionBase.h
+++ b/src/dimred/DimensionalityReductionBase.h
@@ -43,7 +43,7 @@ protected:
   DimensionalityReductionBase* dimredbase;
 public:
   static void registerKeywords( Keywords& keys );
-  DimensionalityReductionBase( const ActionOptions& );
+  explicit DimensionalityReductionBase( const ActionOptions& );
 /// Get the ith data point (this returns the projection)
   virtual void getProjection( const unsigned& idata, std::vector<double>& point, double& weight );
 /// Actually perform the analysis
diff --git a/src/dimred/OutputPCAProjections.cpp b/src/dimred/OutputPCAProjections.cpp
index 175ecfe9c187acac7c4def95e5442ca55c5c1222..e0ff125097432e632442375aa5329b26b3f3782c 100644
--- a/src/dimred/OutputPCAProjections.cpp
+++ b/src/dimred/OutputPCAProjections.cpp
@@ -50,7 +50,7 @@ private:
   std::string filename;
 public:
   static void registerKeywords( Keywords& keys );
-  OutputPCAProjection( const ActionOptions& );
+  explicit OutputPCAProjection( const ActionOptions& );
   void performTask( const unsigned&, const unsigned&, MultiValue& ) const { plumed_error(); }
   void performAnalysis();
 };
diff --git a/src/dimred/ProjectNonLandmarkPoints.cpp b/src/dimred/ProjectNonLandmarkPoints.cpp
index d51e9fd189a5a8dc54c40800129dc84a37b51beb..cf353493033c36a5506acbb065b25577d44d578c 100644
--- a/src/dimred/ProjectNonLandmarkPoints.cpp
+++ b/src/dimred/ProjectNonLandmarkPoints.cpp
@@ -53,7 +53,7 @@ private:
   void generateProjection( const unsigned& idat, std::vector<double>& point );
 public:
   static void registerKeywords( Keywords& keys );
-  ProjectNonLandmarkPoints( const ActionOptions& ao );
+  explicit ProjectNonLandmarkPoints( const ActionOptions& ao );
 /// Get a reference configuration (this returns the projection)
   analysis::DataCollectionObject& getStoredData( const unsigned& idat, const bool& calcdist );
 /// Overwrite getArguments so we get arguments from underlying class
diff --git a/src/dimred/SketchMap.cpp b/src/dimred/SketchMap.cpp
index 5224a052c1510d5b9fb964a060d32a276acb24f8..6fa0a6fa1a21373beb2adbcc6a006d95952052f5 100644
--- a/src/dimred/SketchMap.cpp
+++ b/src/dimred/SketchMap.cpp
@@ -37,7 +37,7 @@ This can be used to output the data that has been stored in an Analysis object.
 class SketchMap : public ActionShortcut {
 public:
   static void registerKeywords( Keywords& keys );
-  SketchMap( const ActionOptions& );
+  explicit SketchMap( const ActionOptions& );
 };
 
 PLUMED_REGISTER_ACTION(SketchMap,"SKETCH_MAP")
diff --git a/src/dimred/SketchMapBase.h b/src/dimred/SketchMapBase.h
index dc39abb8aff6988e0f6f4bff1cbaffc8a812adfb..f2b2a9cbc77da9e181fca5674b251d977b788ea3 100644
--- a/src/dimred/SketchMapBase.h
+++ b/src/dimred/SketchMapBase.h
@@ -49,7 +49,7 @@ protected:
   double mixparam;
 public:
   static void registerKeywords( Keywords& keys );
-  SketchMapBase( const ActionOptions& );
+  explicit SketchMapBase( const ActionOptions& );
 /// This starts the process of calculating the projections
   void calculateProjections( const Matrix<double>&, Matrix<double>& );
 /// This finishes the process of calculating the prjections
diff --git a/src/dimred/SketchMapConjGrad.cpp b/src/dimred/SketchMapConjGrad.cpp
index 43ebbfe2b16607b92b293642673f662a333ef983..c78fd7a8de300597929681fc847e6aea29433483 100644
--- a/src/dimred/SketchMapConjGrad.cpp
+++ b/src/dimred/SketchMapConjGrad.cpp
@@ -40,7 +40,7 @@ private:
   double cgtol;
 public:
   static void registerKeywords( Keywords& keys );
-  SketchMapConjGrad( const ActionOptions& ao );
+  explicit SketchMapConjGrad( const ActionOptions& ao );
   void minimise( Matrix<double>& );
 };
 
diff --git a/src/dimred/SketchMapPointwise.cpp b/src/dimred/SketchMapPointwise.cpp
index 9f547fca37fb25ca9a0eb2251d2212535967f2e7..b8a8a865e700edb42b5d8d7934ec75b49017d711 100644
--- a/src/dimred/SketchMapPointwise.cpp
+++ b/src/dimred/SketchMapPointwise.cpp
@@ -43,7 +43,7 @@ private:
   std::vector<unsigned> npoints, nfgrid;
 public:
   static void registerKeywords( Keywords& keys );
-  SketchMapPointwise( const ActionOptions& ao );
+  explicit SketchMapPointwise( const ActionOptions& ao );
   void minimise( Matrix<double>& );
 };
 
diff --git a/src/dimred/SketchMapRead.cpp b/src/dimred/SketchMapRead.cpp
index 5120c9289bdd661a41c95142e0116c7026c82c6b..506dd7fa51907531d8f5595f45a465cacaf3d980 100644
--- a/src/dimred/SketchMapRead.cpp
+++ b/src/dimred/SketchMapRead.cpp
@@ -53,7 +53,7 @@ private:
   std::vector<std::unique_ptr<ReferenceConfiguration> > myframes;
 public:
   static void registerKeywords( Keywords& keys );
-  SketchMapRead( const ActionOptions& ao );
+  explicit SketchMapRead( const ActionOptions& ao );
   void minimise( Matrix<double>& );
   analysis::DataCollectionObject& getStoredData( const unsigned& idata, const bool& calcdist );
   unsigned getNumberOfDataPoints() const ;
diff --git a/src/dimred/SketchMapSmacof.cpp b/src/dimred/SketchMapSmacof.cpp
index a4088e8054bd1a70b0fd17b4858fe64f4c9774cf..2e6130f26a918a51efe513d0b3c5235e76550832 100644
--- a/src/dimred/SketchMapSmacof.cpp
+++ b/src/dimred/SketchMapSmacof.cpp
@@ -42,7 +42,7 @@ private:
   double recalculateWeights( const Matrix<double>& projections, Matrix<double>& weights );
 public:
   static void registerKeywords( Keywords& keys );
-  SketchMapSmacof( const ActionOptions& ao );
+  explicit SketchMapSmacof( const ActionOptions& ao );
   void minimise( Matrix<double>& );
 };
 
diff --git a/src/dimred/SmacoffMDS.cpp b/src/dimred/SmacoffMDS.cpp
index 3bc60460fc49fa413bce34c7bb87285377d64b98..add9d53ad6dc9371c9a50793ced910425c2a1041 100644
--- a/src/dimred/SmacoffMDS.cpp
+++ b/src/dimred/SmacoffMDS.cpp
@@ -41,7 +41,7 @@ private:
   double tol;
 public:
   static void registerKeywords( Keywords& keys );
-  SmacofMDS( const ActionOptions& );
+  explicit SmacofMDS( const ActionOptions& );
   void calculateProjections( const Matrix<double>&, Matrix<double>& );
 };
 
diff --git a/src/maketools/codecheck b/src/maketools/codecheck
index f39b975549155bf3342c40e73b62041096533fe8..51b2213c5d2d67f98ff394047920ed42e9ca04fd 100755
--- a/src/maketools/codecheck
+++ b/src/maketools/codecheck
@@ -37,6 +37,7 @@ if [ $do_cppcheck == true ] ; then
   cppcheck --std=c++11 --std=posix -j 4 --platform=unix64 --language=c++ \
   -U__GNUG__ -U__PLUMED_HAS_EXTERNAL_LAPACK -U__PLUMED_HAS_EXTERNAL_BLAS \
   -UGMX_CYGWIN  -UF77_NO_UNDERSCORE -U_GLIBCXX_DEBUG -DNDEBUG -U__PLUMED_PBC_WHILE  \
+  -D__PLUMED_WRAPPER_CXX_EXPLICIT=explicit \
   --template='[{file}:{line}] ({severity}) :{id}: {message}' --enable=all --inline-suppr --force \
   $files
 fi
diff --git a/src/piv/PIV.cpp b/src/piv/PIV.cpp
index c53cbbc9935ee08879939eedb82a567d7d9c7c06..08f75162c04597a9e26663abd7df7dfec7e37b14 100644
--- a/src/piv/PIV.cpp
+++ b/src/piv/PIV.cpp
@@ -207,7 +207,7 @@ private:
   bool Svol,cross,direct,doneigh,test,CompDer,com;
 public:
   static void registerKeywords( Keywords& keys );
-  PIV(const ActionOptions&);
+  explicit PIV(const ActionOptions&);
   ~PIV();
   // active methods:
   virtual void calculate();
diff --git a/src/tools/ConjugateGradient.h b/src/tools/ConjugateGradient.h
index 399a2958cf10f28838f9e528bc0a6172f51e3d90..9547506739363051d1dacfae7822ed8a7dfe1ad1 100644
--- a/src/tools/ConjugateGradient.h
+++ b/src/tools/ConjugateGradient.h
@@ -35,7 +35,7 @@ private:
   const unsigned ITMAX;
   const double EPS;
 public:
-  ConjugateGradient( FCLASS* funcc ) : MinimiseBase<FCLASS>(funcc), ITMAX(200), EPS(1E-10) {}
+  explicit ConjugateGradient( FCLASS* funcc ) : MinimiseBase<FCLASS>(funcc), ITMAX(200), EPS(1E-10) {}
   void minimise( const double& ftol, std::vector<double>& p, engf_pointer myfunc );
 };
 
diff --git a/src/tools/PlumedHandle.h b/src/tools/PlumedHandle.h
index 517fb768eb25324184f17d8d8ea9d7c2eccb719e..500a17f4e729689d5440a944fa6290756a491ebe 100644
--- a/src/tools/PlumedHandle.h
+++ b/src/tools/PlumedHandle.h
@@ -77,7 +77,7 @@ class PlumedHandle {
 /// Default construct as nullptr
     DlHandle() {}
 /// Construct from a void*
-    DlHandle(void*h): handle(h) {}
+    explicit DlHandle(void*h): handle(h) {}
 /// Destructor will call dlclose if necessary
     ~DlHandle();
 /// Covertible to void* so that it can be used directly
diff --git a/src/tools/Stopwatch.h b/src/tools/Stopwatch.h
index 921de177c278d9e88673174d8522fcb58349cab8..a6cdc32885786d004fd7c6be721c0eff19311280 100644
--- a/src/tools/Stopwatch.h
+++ b/src/tools/Stopwatch.h
@@ -259,7 +259,7 @@ public:
 // When destructing, stopwatch is logged.
 // Make sure that log survives stopwatch. Typically, it should be declared earlier, in order
 // to be destroyed later.
-  Stopwatch(Log&log): mylog(&log) {}
+  explicit Stopwatch(Log&log): mylog(&log) {}
 // Destructor.
   ~Stopwatch();
 /// Start timer named "name"