diff --git a/Framework/API/inc/MantidAPI/IMaskWorkspace.h b/Framework/API/inc/MantidAPI/IMaskWorkspace.h
index cd51c350aaf32b1e154f0c4223c362a707c31a88..b1a9dddd6d875252c4d60bef79b041b08760ce65 100644
--- a/Framework/API/inc/MantidAPI/IMaskWorkspace.h
+++ b/Framework/API/inc/MantidAPI/IMaskWorkspace.h
@@ -38,6 +38,7 @@ class DLLExport IMaskWorkspace {
 public:
   IMaskWorkspace() = default;
   IMaskWorkspace &operator=(const IMaskWorkspace &) = delete;
+  virtual ~IMaskWorkspace() = default;
   /// Return the workspace typeID
   virtual const std::string id() const { return "IMaskWorkspace"; }
   /// Total number of masked pixels
diff --git a/Framework/Algorithms/src/PolarizationEfficiencyCor.cpp b/Framework/Algorithms/src/PolarizationEfficiencyCor.cpp
index 553dcd3ab9573e8e92ee3d3fe285e4610c53fd5e..3d30c504028cb583c4f7931c3a8ce0314f6b688b 100644
--- a/Framework/Algorithms/src/PolarizationEfficiencyCor.cpp
+++ b/Framework/Algorithms/src/PolarizationEfficiencyCor.cpp
@@ -557,8 +557,8 @@ void PolarizationEfficiencyCor::checkConsistentX(
   const auto &P2x = efficiencies.P2->x();
   checkX(P2x, "P2");
   // A local helper function to check an input workspace against F1.
-  auto checkWS = [&F1x, &checkX](const API::MatrixWorkspace_sptr &ws,
-                                 const std::string &tag) {
+  auto checkWS = [&checkX](const API::MatrixWorkspace_sptr &ws,
+                           const std::string &tag) {
     const auto nHist = ws->getNumberHistograms();
     for (size_t i = 0; i != nHist; ++i) {
       checkX(ws->x(i), tag);
diff --git a/Framework/Crystal/inc/MantidCrystal/FindSXPeaksHelper.h b/Framework/Crystal/inc/MantidCrystal/FindSXPeaksHelper.h
index 83c03c8fc5f103a00c2cc49e1f142e3e52301e0f..e021920f5c8ee9f3d7f1af280ce54bbc7c6a566f 100644
--- a/Framework/Crystal/inc/MantidCrystal/FindSXPeaksHelper.h
+++ b/Framework/Crystal/inc/MantidCrystal/FindSXPeaksHelper.h
@@ -122,6 +122,7 @@ private:
  * ------------------------------------------------------------------------------------------
  */
 struct DLLExport BackgroundStrategy {
+  virtual ~BackgroundStrategy() = default;
   virtual bool isBelowBackground(const double intensity,
                                  const HistogramData::HistogramY &y) const = 0;
 };
@@ -155,6 +156,7 @@ public:
                       const double minValue = EMPTY_DBL(),
                       const double maxValue = EMPTY_DBL(),
                       const XAxisUnit units = XAxisUnit::TOF);
+  virtual ~PeakFindingStrategy() = default;
   PeakList findSXPeaks(const HistogramData::HistogramX &x,
                        const HistogramData::HistogramY &y,
                        const int workspaceIndex) const;
@@ -219,6 +221,7 @@ private:
  */
 class DLLExport CompareStrategy {
 public:
+  virtual ~CompareStrategy() = default;
   virtual bool compare(const SXPeak &lhs, const SXPeak &rhs) const = 0;
 };
 
@@ -253,6 +256,7 @@ private:
 class DLLExport ReducePeakListStrategy {
 public:
   ReducePeakListStrategy(const CompareStrategy *compareStrategy);
+  virtual ~ReducePeakListStrategy() = default;
   virtual std::vector<SXPeak>
   reduce(const std::vector<SXPeak> &peaks,
          Mantid::Kernel::ProgressBase &progress) const = 0;
diff --git a/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp b/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp
index 98ecd9628f8812cfd0bac078b667474144a0a51f..fa2ce0ddb6a3ba13c5b128dc03133e80abf3c6ac 100644
--- a/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp
+++ b/Framework/CurveFitting/src/FuncMinimizers/FABADAMinimizer.cpp
@@ -959,12 +959,12 @@ void FABADAMinimizer::calculateConvChainAndBestParameters(
       auto posBestPar = std::find(reducedChain[j].begin(),
                                   reducedChain[j].end(), bestParameters[j]);
       double varLeft = 0, varRight = 0;
-      for (auto k = reducedChain[j].begin(); k < reducedChain[j].end(); k++) {
+      for (auto k = reducedChain[j].begin(); k < reducedChain[j].end();
+           k += 2) {
         if (k < posBestPar)
           varLeft += (*k - bestParameters[j]) * (*k - bestParameters[j]);
         else if (k > posBestPar)
           varRight += (*k - bestParameters[j]) * (*k - bestParameters[j]);
-        ++k;
       }
       if (posBestPar != reducedChain[j].begin())
         varLeft /= double(posBestPar - reducedChain[j].begin());
diff --git a/Framework/Geometry/inc/MantidGeometry/Crystal/HKLGenerator.h b/Framework/Geometry/inc/MantidGeometry/Crystal/HKLGenerator.h
index b20d11ccf2f0c219d02657d251d62098597c517a..b3467fdf70924cd0e3b8d1dd283e136899470d3a 100644
--- a/Framework/Geometry/inc/MantidGeometry/Crystal/HKLGenerator.h
+++ b/Framework/Geometry/inc/MantidGeometry/Crystal/HKLGenerator.h
@@ -143,7 +143,7 @@ public:
     int m_h, m_k, m_l;
     Kernel::V3D m_hkl;
 
-    int m_hMin, m_hMax;
+    int m_hMax;
     int m_kMin, m_kMax;
     int m_lMin, m_lMax;
   };
diff --git a/Framework/Geometry/inc/MantidGeometry/Objects/IObject.h b/Framework/Geometry/inc/MantidGeometry/Objects/IObject.h
index 24331e8075214d30793df52b286bdd80b10077c7..6b186d0b7acc8e6379a8d936f1f30ea57d24c521 100644
--- a/Framework/Geometry/inc/MantidGeometry/Objects/IObject.h
+++ b/Framework/Geometry/inc/MantidGeometry/Objects/IObject.h
@@ -54,6 +54,7 @@ class vtkGeometryCacheWriter;
  */
 class MANTID_GEOMETRY_DLL IObject {
 public:
+  virtual ~IObject() = default;
   virtual bool isValid(const Kernel::V3D &) const = 0;
   virtual bool isOnSide(const Kernel::V3D &) const = 0;
   virtual int calcValidType(const Kernel::V3D &Pt,
diff --git a/Framework/Geometry/src/Crystal/HKLGenerator.cpp b/Framework/Geometry/src/Crystal/HKLGenerator.cpp
index 9d56c3a2f5dd5fcc96326c4b51852362a6558c03..0979b69dff53f69745f4d2e8b991c44f9d89e1da 100644
--- a/Framework/Geometry/src/Crystal/HKLGenerator.cpp
+++ b/Framework/Geometry/src/Crystal/HKLGenerator.cpp
@@ -62,20 +62,20 @@ V3D HKLGenerator::getEndHKL() const {
 
 /// Default constructor, requirement from boost::iterator_facade
 HKLGenerator::const_iterator::const_iterator()
-    : m_h(0), m_k(0), m_l(0), m_hkl(V3D(0, 0, 0)), m_hMin(0), m_hMax(0),
-      m_kMin(0), m_kMax(0), m_lMin(0), m_lMax(0) {}
+    : m_h(0), m_k(0), m_l(0), m_hkl(V3D(0, 0, 0)), m_hMax(0), m_kMin(0),
+      m_kMax(0), m_lMin(0), m_lMax(0) {}
 
 /// Return an iterator with min = max = current.
 HKLGenerator::const_iterator::const_iterator(const V3D &current)
     : m_h(static_cast<int>(current.X())), m_k(static_cast<int>(current.Y())),
-      m_l(static_cast<int>(current.Z())), m_hkl(current), m_hMin(m_h),
-      m_hMax(m_h), m_kMin(m_k), m_kMax(m_k), m_lMin(m_l), m_lMax(m_l) {}
+      m_l(static_cast<int>(current.Z())), m_hkl(current), m_hMax(m_h),
+      m_kMin(m_k), m_kMax(m_k), m_lMin(m_l), m_lMax(m_l) {}
 
 /// Return an iterator that can move from min to max, with current = min
 HKLGenerator::const_iterator::const_iterator(const V3D &hklMin,
                                              const V3D &hklMax)
     : m_h(static_cast<int>(hklMin.X())), m_k(static_cast<int>(hklMin.Y())),
-      m_l(static_cast<int>(hklMin.Z())), m_hkl(hklMin), m_hMin(m_h),
+      m_l(static_cast<int>(hklMin.Z())), m_hkl(hklMin),
       m_hMax(static_cast<int>(hklMax.X())), m_kMin(m_k),
       m_kMax(static_cast<int>(hklMax.Y())), m_lMin(m_l),
       m_lMax(static_cast<int>(hklMax.Z())) {}
diff --git a/Framework/Geometry/src/Math/BnId.cpp b/Framework/Geometry/src/Math/BnId.cpp
index 84088af001457c25bc1c922dd3fadc196f625473..7fb6b3b33b71c44e6f387d007b68c7d3c2680c84 100644
--- a/Framework/Geometry/src/Math/BnId.cpp
+++ b/Framework/Geometry/src/Math/BnId.cpp
@@ -110,8 +110,6 @@ int BnId::operator<(const BnId &A) const
 {
   if (A.size != size)
     return size < A.size;
-  std::pair<int, int> cntA(0, 0); // count for A
-  std::pair<int, int> cntT(0, 0); // count for this
   if (Znum != A.Znum)
     return (Znum < A.Znum) ? 1 : 0;
 
@@ -282,8 +280,6 @@ std::pair<int, BnId> BnId::makeCombination(const BnId &A) const
     return std::pair<int, BnId>(0, BnId());
 
   int flag(0);                    // numb of diff
-  std::pair<int, int> Tcnt(0, 0); // this counter
-  std::pair<int, int> Acnt(0, 0); // A counter
   auto avc = A.Tval.cbegin();
   std::vector<int>::const_iterator chpt; // change point
   for (auto tvc = Tval.cbegin(); tvc != Tval.cend(); ++tvc, ++avc) {
diff --git a/Framework/Kernel/src/MaterialXMLParser.cpp b/Framework/Kernel/src/MaterialXMLParser.cpp
index 1e110f55d4e2f82abe2fd90c8dbffb495f2e697e..514254387319e608f2d26e63ce0592a475fd8567 100644
--- a/Framework/Kernel/src/MaterialXMLParser.cpp
+++ b/Framework/Kernel/src/MaterialXMLParser.cpp
@@ -51,6 +51,7 @@ const char *ABSORB_ATT = "absorptionxsec";
 
 // Base type to put in a hash
 struct BuilderHandle {
+  virtual ~BuilderHandle() = default;
   virtual void operator()(MaterialBuilder &builder,
                           const std::string &value) const = 0;
 };
diff --git a/Framework/LiveData/inc/MantidLiveData/Kafka/IKafkaBroker.h b/Framework/LiveData/inc/MantidLiveData/Kafka/IKafkaBroker.h
index 0b83329afb84bfc383025bc1df4b4ac6646e3359..6104a95cd4860d77c0d21165cca146242ce0d243 100644
--- a/Framework/LiveData/inc/MantidLiveData/Kafka/IKafkaBroker.h
+++ b/Framework/LiveData/inc/MantidLiveData/Kafka/IKafkaBroker.h
@@ -35,7 +35,7 @@ namespace LiveData {
 */
 class DLLExport IKafkaBroker {
 public:
-  ~IKafkaBroker() = default;
+  virtual ~IKafkaBroker() = default;
 
   virtual std::unique_ptr<IKafkaStreamSubscriber>
   subscribe(std::vector<std::string> topics,
diff --git a/Framework/Parallel/inc/MantidParallel/Status.h b/Framework/Parallel/inc/MantidParallel/Status.h
index adbb5c852be0efdad89126aa8943569e548b364d..965a117cf8c7c473525decf0a28746ae03a45984 100644
--- a/Framework/Parallel/inc/MantidParallel/Status.h
+++ b/Framework/Parallel/inc/MantidParallel/Status.h
@@ -44,7 +44,8 @@ class ThreadingBackend;
 class MANTID_PARALLEL_DLL Status {
 public:
 #ifdef MPI_EXPERIMENTAL
-  Status(const boost::mpi::status &status) : m_status(status) {}
+  Status(const boost::mpi::status &status)
+      : m_status(status), m_threadingBackend{false} {}
 #endif
 
   template <typename T> boost::optional<int> count() const {
@@ -56,12 +57,14 @@ public:
   }
 
 private:
-  Status(const size_t size) : m_size(size), m_threadingBackend(true) {}
+  Status(const size_t size) : m_size(size) {}
 #ifdef MPI_EXPERIMENTAL
   boost::mpi::status m_status;
 #endif
   const size_t m_size{0};
-  const bool m_threadingBackend{false};
+#ifdef MPI_EXPERIMENTAL
+  bool m_threadingBackend{true};
+#endif
   // For accessing constructor based on size.
   friend class detail::ThreadingBackend;
 };
diff --git a/Framework/Parallel/test/EventParserTest.h b/Framework/Parallel/test/EventParserTest.h
index 0dce40044bdbb7e1165d6dc4fc4fdc58fb0154d8..2de672e236ad0e241279aaadd0646c84e86630c5 100644
--- a/Framework/Parallel/test/EventParserTest.h
+++ b/Framework/Parallel/test/EventParserTest.h
@@ -97,7 +97,7 @@ private:
               static_cast<IndexType>(m_bank_offsets[bank] + absolutePixel));
           std::transform(list.cbegin() + prev_end, list.cend(),
                          std::back_inserter(m_event_time_offsets[bank]),
-                         [this](const TofEvent &event) {
+                         [](const TofEvent &event) {
                            return static_cast<TimeOffsetType>(event.tof());
                          });
         }
diff --git a/Framework/PythonInterface/mantid/kernel/src/Converters/CloneToNumpy.cpp b/Framework/PythonInterface/mantid/kernel/src/Converters/CloneToNumpy.cpp
index bf501e26a4bc419856aa96a90cc9b3b9c9969542..fb49c9d5934b2a8727b8d2addf5bf723083511d0 100644
--- a/Framework/PythonInterface/mantid/kernel/src/Converters/CloneToNumpy.cpp
+++ b/Framework/PythonInterface/mantid/kernel/src/Converters/CloneToNumpy.cpp
@@ -22,6 +22,7 @@ extern template int NDArrayTypeIndex<unsigned long>::typenum;
 extern template int NDArrayTypeIndex<unsigned long long>::typenum;
 extern template int NDArrayTypeIndex<float>::typenum;
 extern template int NDArrayTypeIndex<double>::typenum;
+extern template int NDArrayTypeIndex<Mantid::Types::Core::DateAndTime>::typenum;
 
 namespace Impl {
 /**
diff --git a/Framework/PythonInterface/mantid/kernel/src/Converters/DateAndTime.cpp b/Framework/PythonInterface/mantid/kernel/src/Converters/DateAndTime.cpp
index 17e46c70885598abac82d7128e2787accf168869..539d41c26a28fd1f1c791fb2a19bf2fa4eb9cfc3 100644
--- a/Framework/PythonInterface/mantid/kernel/src/Converters/DateAndTime.cpp
+++ b/Framework/PythonInterface/mantid/kernel/src/Converters/DateAndTime.cpp
@@ -42,7 +42,14 @@ PyArray_Descr *descr_ns() { return func_PyArray_Descr("M8[ns]"); }
 // internal function that handles raw pointer
 boost::shared_ptr<Types::Core::DateAndTime>
 to_dateandtime(const PyObject *datetime) {
+#if __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wcast-qual"
+#endif
   if (!PyArray_IsScalar(datetime, Datetime)) {
+#if __clang__
+#pragma clang diagnostic pop
+#endif
     throw std::runtime_error("Expected datetime64");
   }
 
diff --git a/Framework/PythonInterface/mantid/kernel/src/Converters/NDArrayToVector.cpp b/Framework/PythonInterface/mantid/kernel/src/Converters/NDArrayToVector.cpp
index 94668f5a1d3fd66fc43bc29e7028c12a7f9e7fd5..93f0a100d4cfd3b1c7a992a5a18d46daed55f614 100644
--- a/Framework/PythonInterface/mantid/kernel/src/Converters/NDArrayToVector.cpp
+++ b/Framework/PythonInterface/mantid/kernel/src/Converters/NDArrayToVector.cpp
@@ -27,6 +27,14 @@ extern template int NDArrayTypeIndex<unsigned long>::typenum;
 extern template int NDArrayTypeIndex<unsigned long long>::typenum;
 extern template int NDArrayTypeIndex<float>::typenum;
 extern template int NDArrayTypeIndex<double>::typenum;
+extern template int NDArrayTypeIndex<bool>::typecode;
+extern template int NDArrayTypeIndex<int>::typecode;
+extern template int NDArrayTypeIndex<long>::typecode;
+extern template int NDArrayTypeIndex<long long>::typecode;
+extern template int NDArrayTypeIndex<unsigned int>::typecode;
+extern template int NDArrayTypeIndex<unsigned long>::typecode;
+extern template int NDArrayTypeIndex<unsigned long long>::typecode;
+extern template int NDArrayTypeIndex<double>::typecode;
 }
 
 namespace {
diff --git a/MantidPlot/src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp b/MantidPlot/src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp
index 0ebcec2d711dec5d5a9bbae28cbd21f06be1a59b..c599b26d407bc9ebab0f423874f9454a244ce0e1 100644
--- a/MantidPlot/src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp
+++ b/MantidPlot/src/lib/3rdparty/qtcolorpicker/src/qtcolorpicker.cpp
@@ -605,10 +605,7 @@ void ColorPickerPopup::insertColor(const QColor &col, const QString &text,
 QColor ColorPickerPopup::color(int index) const {
   if (index < 0 || index > (int)items.count() - 1)
     return QColor();
-
-  // cppcheck-suppress cstyleCast
-  ColorPickerPopup *that = (ColorPickerPopup *)this;
-  return that->items.at(index)->color();
+  return this->items.at(index)->color();
 }
 
 /*! \internal
diff --git a/qt/scientific_interfaces/EnggDiffraction/IEnggDiffMultiRunFittingWidgetAdder.h b/qt/scientific_interfaces/EnggDiffraction/IEnggDiffMultiRunFittingWidgetAdder.h
index 55657b8990bab2bad883577516a9408d06a0170c..03c3c3e8e2024dff5cac1b3f5f644abd0d214e98 100644
--- a/qt/scientific_interfaces/EnggDiffraction/IEnggDiffMultiRunFittingWidgetAdder.h
+++ b/qt/scientific_interfaces/EnggDiffraction/IEnggDiffMultiRunFittingWidgetAdder.h
@@ -9,6 +9,7 @@ namespace CustomInterfaces {
 class IEnggDiffMultiRunFittingWidgetAdder {
 
 public:
+  virtual ~IEnggDiffMultiRunFittingWidgetAdder() = default;
   virtual void operator()(IEnggDiffMultiRunFittingWidgetOwner &owner) = 0;
 };