diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 652c548d59a54c91998540a10679534e35a22621..e1b524ce6870a6ed898c0431cc39053b5ac76c9c 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -164,9 +164,8 @@ class LL_COMMON_API LLAssetType
 
     static const std::string    BADLOOKUP;
 
-protected:
-	LLAssetType() {}
-	~LLAssetType() {}
+	LLAssetType() = delete;
+	~LLAssetType() = delete;
 };
 
 #endif // LL_LLASSETTYPE_H
diff --git a/indra/llcommon/llcallbacklist.cpp b/indra/llcommon/llcallbacklist.cpp
index 1876eedd18dc195dbcb20bed4c7e67b439298701..61a7639fc314bf004a8fa1f3530d0e4bed84cabb 100644
--- a/indra/llcommon/llcallbacklist.cpp
+++ b/indra/llcommon/llcallbacklist.cpp
@@ -36,16 +36,6 @@ LLCallbackList gIdleCallbacks;
 // Member functions
 //
 
-LLCallbackList::LLCallbackList()
-{
-	// nothing
-}
-
-LLCallbackList::~LLCallbackList()
-{
-}
-
-
 void LLCallbackList::addFunction( callback_t func, void *data)
 {
 	if (!func)
diff --git a/indra/llcommon/llcallbacklist.h b/indra/llcommon/llcallbacklist.h
index 89716cd74ca985696fbc785d5b99b22a704ae91d..4493a99921210825c1ee4cab5bfed1ef32bbed48 100644
--- a/indra/llcommon/llcallbacklist.h
+++ b/indra/llcommon/llcallbacklist.h
@@ -41,8 +41,8 @@ class LLCallbackList
 	//
 	typedef std::list< callback_pair_t >	callback_list_t; 
 	
-	LLCallbackList();
-	~LLCallbackList();
+	LLCallbackList() = default;
+	~LLCallbackList() = default;
 
 	void addFunction( callback_t func, void *data = NULL );			// register a callback, which will be called as func(data)
 	bool containsFunction( callback_t func, void *data = NULL );	// true if list already contains the function/data pair
diff --git a/indra/llcommon/llcallstack.cpp b/indra/llcommon/llcallstack.cpp
index a9ccbdc60938571db1d86e985871b9735c74531c..00b07f2b5e7234373cf70d99197583cde3451316 100644
--- a/indra/llcommon/llcallstack.cpp
+++ b/indra/llcommon/llcallstack.cpp
@@ -39,9 +39,8 @@ class LLCallStackImpl: public StackWalker
         StackWalker(false,0) // non-verbose, options = 0
     {
     }
-    ~LLCallStackImpl()
-    {
-    }
+    ~LLCallStackImpl() = default;
+
     void getStack(std::vector<std::string>& stack, S32 skip_count=0, bool verbose=false)
     {
         m_stack.clear();
@@ -66,8 +65,8 @@ class LLCallStackImpl: public StackWalker
 class LLCallStackImpl
 {
 public:
-    LLCallStackImpl() {}
-    ~LLCallStackImpl() {}
+    LLCallStackImpl() = default;
+    ~LLCallStackImpl() = default;
     void getStack(std::vector<std::string>& stack, S32 skip_count=0, bool verbose=false)
     {
         stack.clear();
diff --git a/indra/llcommon/lldeadmantimer.h b/indra/llcommon/lldeadmantimer.h
index 980976e176bd84a5d7d5a7567fa68d29aaf6f5fa..f2f6c14d9f8bbbd4d7ac481d87f537551fa23ca6 100644
--- a/indra/llcommon/lldeadmantimer.h
+++ b/indra/llcommon/lldeadmantimer.h
@@ -100,8 +100,7 @@ class LL_COMMON_API LLDeadmanTimer
 	///					collected and will be zero if queried.
 	LLDeadmanTimer(F64 horizon, bool inc_cpu);
 
-	~LLDeadmanTimer() 
-		{}
+	~LLDeadmanTimer() = default;
 	
 private:
 	LLDeadmanTimer(const LLDeadmanTimer &);				// Not defined
diff --git a/indra/llcommon/lldependencies.h b/indra/llcommon/lldependencies.h
index db2bbab8b040269e04bec4638b70bea4dd6fa4e4..6b6a9500e0a8ff932a3c681769c410642ef8ac21 100644
--- a/indra/llcommon/lldependencies.h
+++ b/indra/llcommon/lldependencies.h
@@ -101,7 +101,7 @@ struct instance_from_range: public TYPE
 class LL_COMMON_API LLDependenciesBase
 {
 public:
-    virtual ~LLDependenciesBase() {}
+    virtual ~LLDependenciesBase() = default;
 
     /**
      * Exception thrown by sort() if there's a cycle
diff --git a/indra/llcommon/lldictionary.h b/indra/llcommon/lldictionary.h
index 5800ec5e5d8541ded1f8c651550b194511645642..d56865ab077af73b33469899e4fdf7ff836ef24b 100644
--- a/indra/llcommon/lldictionary.h
+++ b/indra/llcommon/lldictionary.h
@@ -35,7 +35,7 @@
 struct LL_COMMON_API LLDictionaryEntry
 {
 	LLDictionaryEntry(const std::string &name);
-	virtual ~LLDictionaryEntry() {}
+	virtual ~LLDictionaryEntry() = default;
 	const std::string mName;
 	std::string mNameCapitalized;
 };
@@ -48,7 +48,7 @@ class LLDictionary : public std::map<Index, Entry *>
 	typedef typename map_t::iterator iterator_t;
 	typedef typename map_t::const_iterator const_iterator_t;
 	
-	LLDictionary() {}
+	LLDictionary() = default;
 	virtual ~LLDictionary()
 	{
 		for (iterator_t iter = map_t::begin(); iter != map_t::end(); ++iter)
diff --git a/indra/llcommon/lldoubledispatch.h b/indra/llcommon/lldoubledispatch.h
index 8ed295b6f133dc72190ba675df603db92fee6b57..081f9ac38d2b608bb945379a1d50bee7a24d3ce9 100644
--- a/indra/llcommon/lldoubledispatch.h
+++ b/indra/llcommon/lldoubledispatch.h
@@ -224,7 +224,7 @@ class LLDoubleDispatch
     /// This is the base class for each entry in our dispatch table.
     struct EntryBase
     {
-        virtual ~EntryBase() {}
+        virtual ~EntryBase() = default;
         virtual bool matches(const ParamBaseType& param1, const ParamBaseType& param2) const = 0;
         virtual ReturnType operator()(ParamBaseType& param1, ParamBaseType& param2) const = 0;
     };
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 4722cd1adb2d1d5c76a43c77e443d7a7fd6f50d1..76d0536e551f39a0bbfecdda41bbd81a8d1b4668 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -928,10 +928,6 @@ namespace LLError
 	{
 	}
 
-	Recorder::~Recorder()
-	{
-	}
-
 	bool Recorder::wantsTime()
 	{ 
 		return mWantsTime; 
diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h
index bfa22690252d5716e6470fd4fef301694d10e21d..3562a4ef91d3b385e15d652fd0e8d14fb8082a8b 100644
--- a/indra/llcommon/llerrorcontrol.h
+++ b/indra/llcommon/llerrorcontrol.h
@@ -49,8 +49,8 @@ class LLSD;
 class LLLineBuffer
 {
 public:
-	LLLineBuffer() {};
-	virtual ~LLLineBuffer() {};
+	LLLineBuffer() = default;
+	virtual ~LLLineBuffer() = default;
 
 	virtual void clear() = 0; // Clear the buffer, and reset it.
 
@@ -142,7 +142,7 @@ namespace LLError
 		// An object that handles the actual output or error messages.
 	public:
 		Recorder();
-		virtual ~Recorder();
+		virtual ~Recorder() = default;
 
 		virtual void recordMessage(LLError::ELevel, const std::string& message) = 0;
 			// use the level for better display, not for filtering
diff --git a/indra/llcommon/llerrorthread.cpp b/indra/llcommon/llerrorthread.cpp
index 34fde3b96bd092f709e2b6cb12a8aeae3a26d331..a20253bf45c5c28f8727f1291199a1c3e4ba37a2 100644
--- a/indra/llcommon/llerrorthread.cpp
+++ b/indra/llcommon/llerrorthread.cpp
@@ -35,10 +35,6 @@ LLErrorThread::LLErrorThread()
 {
 }
 
-LLErrorThread::~LLErrorThread()
-{
-}
-
 void LLErrorThread::setUserData(void* user_data)
 {
 	mUserDatap = user_data;
diff --git a/indra/llcommon/llerrorthread.h b/indra/llcommon/llerrorthread.h
index 474cef3a5023b7b38a7eca30e4b1d8c37a2f21e9..c238d003576810389787d4d9ad63d693473d59d7 100644
--- a/indra/llcommon/llerrorthread.h
+++ b/indra/llcommon/llerrorthread.h
@@ -33,7 +33,7 @@ class LL_COMMON_API LLErrorThread : public LLThread
 {
 public:
 	LLErrorThread();
-	~LLErrorThread();
+	~LLErrorThread() = default;
 
 	/*virtual*/ void run(void);
 	void setUserData(void *user_data);
diff --git a/indra/llcommon/llevent.cpp b/indra/llcommon/llevent.cpp
index 633df01588429c81f22aa2e83e16403f84460d83..30572a8055cdb50eaf879ea183bef37721526fcb 100644
--- a/indra/llcommon/llevent.cpp
+++ b/indra/llcommon/llevent.cpp
@@ -34,11 +34,6 @@ using namespace LLOldEvents;
     Events
 ************************************************/
 
-// virtual
-LLEvent::~LLEvent()
-{
-}
-
 // virtual
 bool LLEvent::accept(LLEventListener* listener)
 {
@@ -109,7 +104,7 @@ void LLObservable::fireEvent(LLPointer<LLEvent> event, LLSD filter)
 class LLEventDispatcher::Impl
 {
 public:
-	virtual ~Impl()												{				}
+	virtual ~Impl() = default;
 	virtual bool engage(LLObservable* observable)				{ return true;	}
 	virtual void disengage(LLObservable* observable)			{				}
 
@@ -246,10 +241,6 @@ LLEventDispatcher::~LLEventDispatcher()
     Listeners
 ************************************************/
 
-LLEventListener::~LLEventListener()
-{
-}
-
 LLSimpleListener::~LLSimpleListener()
 {
 	clearDispatchers();
diff --git a/indra/llcommon/llevent.h b/indra/llcommon/llevent.h
index 28ce7de102e579d7af85e2da3acd90ac508cab9a..d179717e1f68e9504fbdd3f02d34f12a337aee58 100644
--- a/indra/llcommon/llevent.h
+++ b/indra/llcommon/llevent.h
@@ -44,7 +44,7 @@ class LLObservable;
 class LL_COMMON_API LLEvent : public LLThreadSafeRefCount
 {
 protected:
-	virtual ~LLEvent();
+	virtual ~LLEvent() = default;
 	
 public:
 	LLEvent(LLObservable* source, const std::string& desc = "") : mSource(source), mDesc(desc) { }
@@ -72,7 +72,7 @@ class LL_COMMON_API LLEvent : public LLThreadSafeRefCount
 class LL_COMMON_API LLEventListener : public LLThreadSafeRefCount
 {
 protected:
-	virtual ~LLEventListener();
+	virtual ~LLEventListener() = default;
 	
 public:
 
diff --git a/indra/llcommon/lleventapi.cpp b/indra/llcommon/lleventapi.cpp
index ff5459c1eb843c4476979aeeedd420a5080ee7cd..eeaf9977c17a96282c95f7f8539b11bf50520110 100644
--- a/indra/llcommon/lleventapi.cpp
+++ b/indra/llcommon/lleventapi.cpp
@@ -43,10 +43,6 @@ LLEventAPI::LLEventAPI(const std::string& name, const std::string& desc, const s
 {
 }
 
-LLEventAPI::~LLEventAPI()
-{
-}
-
 LLEventAPI::Response::Response(const LLSD& seed, const LLSD& request, const LLSD::String& replyKey):
     mResp(seed),
     mReq(request),
diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h
index 5991fe8fd59a6cf4d7ad3b913e3ca7a248ec28ce..08e3626091fa490c17d26455acca947c6ea07858 100644
--- a/indra/llcommon/lleventapi.h
+++ b/indra/llcommon/lleventapi.h
@@ -57,7 +57,7 @@ class LL_COMMON_API LLEventAPI: public LLDispatchListener,
      * subclass method to invoke [default "op"].
      */
     LLEventAPI(const std::string& name, const std::string& desc, const std::string& field="op");
-    virtual ~LLEventAPI();
+    virtual ~LLEventAPI() = default;
 
     /// Get the string name of this LLEventAPI
     std::string getName() const { return ibase::getKey(); }
diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp
index 5b6d4efbe98b8259d09197444b7cc914d80bf554..56ebd05300b44768a70b1242080b794304e2fb34 100644
--- a/indra/llcommon/lleventdispatcher.cpp
+++ b/indra/llcommon/lleventdispatcher.cpp
@@ -396,10 +396,6 @@ LLEventDispatcher::LLEventDispatcher(const std::string& desc, const std::string&
 {
 }
 
-LLEventDispatcher::~LLEventDispatcher()
-{
-}
-
 /**
  * DispatchEntry subclass used for callables accepting(const LLSD&)
  */
diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h
index 9e1244ef5bf4d2f4eeb0f3edac5a77d6d5cbc729..df1eac28c2f2e5e2b5d78ad613b958bdfb28ce36 100644
--- a/indra/llcommon/lleventdispatcher.h
+++ b/indra/llcommon/lleventdispatcher.h
@@ -90,7 +90,7 @@ class LL_COMMON_API LLEventDispatcher
 {
 public:
     LLEventDispatcher(const std::string& desc, const std::string& key);
-    virtual ~LLEventDispatcher();
+    virtual ~LLEventDispatcher() = default;
 
     /// @name Register functions accepting(const LLSD&)
     //@{
@@ -286,7 +286,7 @@ class LL_COMMON_API LLEventDispatcher
     struct DispatchEntry
     {
         DispatchEntry(const std::string& desc);
-        virtual ~DispatchEntry() {} // suppress MSVC warning, sigh
+        virtual ~DispatchEntry()  = default; // suppress MSVC warning, sigh
 
         std::string mDesc;
 
diff --git a/indra/llcommon/lleventemitter.h b/indra/llcommon/lleventemitter.h
index cd82fc56f9678705114354704fb1a7fe9a56a731..2bb5c161e24773670e011bcbdc3bde88639d484e 100644
--- a/indra/llcommon/lleventemitter.h
+++ b/indra/llcommon/lleventemitter.h
@@ -51,9 +51,9 @@ class eventEmitter
 		ObserverContainer observers;
 
 	public:
-		eventEmitter () { };
+		eventEmitter() = default;
 
-		~eventEmitter () { };
+		~eventEmitter() = default;
 
 		///////////////////////////////////////////////////////////////////////////////
 		//
diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h
index e0cad287dd548af4b3e4e4fbd18575b7179aeee2..186089f5b38a21333a87da810e019b2b71fdd5b9 100644
--- a/indra/llcommon/llevents.h
+++ b/indra/llcommon/llevents.h
@@ -601,7 +601,7 @@ class LL_COMMON_API LLEventStream: public LLEventPump
 {
 public:
     LLEventStream(const std::string& name, bool tweak=false): LLEventPump(name, tweak) {}
-    virtual ~LLEventStream() {}
+    virtual ~LLEventStream() = default;
 
     /// Post an event to all listeners
     virtual bool post(const LLSD& event);
@@ -632,7 +632,7 @@ class LL_COMMON_API LLEventMailDrop : public LLEventStream
 {
 public:
     LLEventMailDrop(const std::string& name, bool tweak = false) : LLEventStream(name, tweak) {}
-    virtual ~LLEventMailDrop() {}
+    virtual ~LLEventMailDrop() = default;
     
     /// Post an event to all listeners
     virtual bool post(const LLSD& event) override;
diff --git a/indra/llcommon/lleventtimer.cpp b/indra/llcommon/lleventtimer.cpp
index f575a7b6bf2f30b8b7e48536084e3d4fb30ca260..7de48c0f1472b7d2c6d80e9b5375f813fd61d6e7 100644
--- a/indra/llcommon/lleventtimer.cpp
+++ b/indra/llcommon/lleventtimer.cpp
@@ -50,10 +50,6 @@ LLEventTimer::LLEventTimer(const LLDate& time)
 }
 
 
-LLEventTimer::~LLEventTimer()
-{
-}
-
 //static
 void LLEventTimer::updateClass() 
 {
diff --git a/indra/llcommon/lleventtimer.h b/indra/llcommon/lleventtimer.h
index dbbfe0c6e6cf18efa5ef4fd97f2ff3939cd4f158..3a08b6b00c0919602862f429fbd31f0f40cbc534 100644
--- a/indra/llcommon/lleventtimer.h
+++ b/indra/llcommon/lleventtimer.h
@@ -39,7 +39,7 @@ class LL_COMMON_API LLEventTimer : public LLInstanceTracker<LLEventTimer>
 
 	LLEventTimer(F32 period);	// period is the amount of time between each call to tick() in seconds
 	LLEventTimer(const LLDate& time);
-	virtual ~LLEventTimer();
+	virtual ~LLEventTimer() = default;
 
 	//function to be called at the supplied frequency
 	// Normally return FALSE; TRUE will delete the timer after the function returns.
diff --git a/indra/llcommon/llheartbeat.cpp b/indra/llcommon/llheartbeat.cpp
index 19b7452748d930fdcad31318cc2473ff234f2b69..142ff55fc7e14c3d631cc37fe68309f4bc4ea2d3 100644
--- a/indra/llcommon/llheartbeat.cpp
+++ b/indra/llcommon/llheartbeat.cpp
@@ -46,11 +46,6 @@ LLHeartbeat::LLHeartbeat(F32 secs_between_heartbeat,
 	mPanicTimer.setTimerExpirySec(mAggressiveHeartbeatPanicSecs);
 }
 
-LLHeartbeat::~LLHeartbeat()
-{
-	// do nothing.
-}
-
 void
 LLHeartbeat::setSuppressed(bool is_suppressed)
 {
diff --git a/indra/llcommon/llheartbeat.h b/indra/llcommon/llheartbeat.h
index 4a75fcc103d6380619a2aa261b60de003323a896..7bfd81dad2a0d36dd8262179f9fcdd264440f384 100644
--- a/indra/llcommon/llheartbeat.h
+++ b/indra/llcommon/llheartbeat.h
@@ -48,7 +48,7 @@ class LL_COMMON_API LLHeartbeat
 	LLHeartbeat(F32 secs_between_heartbeat = 5.0f,
 		    F32 aggressive_heartbeat_panic_secs = 10.0f,
 		    F32 aggressive_heartbeat_max_blocking_secs = 4.0f);
-	~LLHeartbeat();
+	~LLHeartbeat() = default;
 
 	bool send(F32 timeout_sec = 0.0f);
 	void setSuppressed(bool is_suppressed);
diff --git a/indra/llcommon/llinitparam.h b/indra/llcommon/llinitparam.h
index 004005265fb6c2b4429073ce6d6f8a1c00d2eb97..83d3c137eab49eaa35cef0f4bc45a6634e8efafe 100644
--- a/indra/llcommon/llinitparam.h
+++ b/indra/llcommon/llinitparam.h
@@ -598,7 +598,7 @@ namespace LLInitParam
 	{
 		struct UserData
 		{
-			virtual ~UserData() {}
+			virtual ~UserData() = default;
 		};
 
 		typedef bool(*merge_func_t)(Param&, const Param&, bool);
@@ -848,7 +848,7 @@ namespace LLInitParam
 			mParamProvided(false)
 		{}
 
-		virtual ~BaseBlock() {}
+		virtual ~BaseBlock() = default;
 		bool submitValue(Parser::name_stack_t& name_stack, Parser& p, bool silent=false);
 
 		param_handle_t getHandleFromParam(const Param* param) const;
diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp
index cf8f8cc6a5ee9c8ca7c3168cbcc8f4ef6f69ed75..f9b81553c466fd95aaf4c022c98507fc6c73b34b 100644
--- a/indra/llcommon/llleap.cpp
+++ b/indra/llcommon/llleap.cpp
@@ -39,9 +39,6 @@
 #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
 #endif
 
-LLLeap::LLLeap() {}
-LLLeap::~LLLeap() {}
-
 class LLLeapImpl: public LLLeap
 {
     LOG_CLASS(LLLeap);
diff --git a/indra/llcommon/llleap.h b/indra/llcommon/llleap.h
index 7cecdf2f8f6821e4a7e0c844c60d92ef446c18ae..2620d8e6602a244d9971f83e33db8498bb3dc632 100644
--- a/indra/llcommon/llleap.h
+++ b/indra/llcommon/llleap.h
@@ -86,10 +86,10 @@ class LL_COMMON_API LLLeap: public LLInstanceTracker<LLLeap>
         Error(const std::string& what): LLException(what) {}
     };
 
-    virtual ~LLLeap();
+    virtual ~LLLeap() = default;
 
 protected:
-    LLLeap();
+    LLLeap() = default;
 };
 
 #endif /* ! defined(LL_LLLEAP_H) */
diff --git a/indra/llcommon/llliveappconfig.cpp b/indra/llcommon/llliveappconfig.cpp
index a9b1cdf4f641cfb9fdff930b5ed1b601cadaa792..1be558256b67bf7701e22d0e3b307b5f6905ab87 100644
--- a/indra/llcommon/llliveappconfig.cpp
+++ b/indra/llcommon/llliveappconfig.cpp
@@ -41,10 +41,7 @@ LLLiveAppConfig::LLLiveAppConfig(
 { }
 
 
-LLLiveAppConfig::~LLLiveAppConfig()
-{ }
-
-// virtual 
+// virtual
 bool LLLiveAppConfig::loadFile()
 {
 	LL_INFOS() << "LLLiveAppConfig::loadFile(): reading from "
diff --git a/indra/llcommon/llliveappconfig.h b/indra/llcommon/llliveappconfig.h
index 4fd7c26a07e0f0c432044813a244cdbffbabacf0..a8b75088180b262466a94faff663ca508a269f44 100644
--- a/indra/llcommon/llliveappconfig.h
+++ b/indra/llcommon/llliveappconfig.h
@@ -57,7 +57,7 @@ class LL_COMMON_API LLLiveAppConfig : public LLLiveFile
 		F32 refresh_period,
 		LLApp::OptionPriority priority);
 
-	~LLLiveAppConfig(); ///< Destructor
+	~LLLiveAppConfig() = default; ///< Destructor
 
 protected:
 	/*virtual*/ bool loadFile();
diff --git a/indra/llcommon/llmemorystream.cpp b/indra/llcommon/llmemorystream.cpp
index 707ac8fd0ff714f6ac4aad169480b7660e613c47..63d74b5ef3adffd40022ed77a820fa2ce6da1ae5 100644
--- a/indra/llcommon/llmemorystream.cpp
+++ b/indra/llcommon/llmemorystream.cpp
@@ -34,10 +34,6 @@ LLMemoryStreamBuf::LLMemoryStreamBuf(const U8* start, S32 length)
 	reset(start, length);
 }
 
-LLMemoryStreamBuf::~LLMemoryStreamBuf()
-{
-}
-
 void LLMemoryStreamBuf::reset(const U8* start, S32 length)
 {
 	setg((char*)start, (char*)start, (char*)start + length);
@@ -63,8 +59,3 @@ LLMemoryStream::LLMemoryStream(const U8* start, S32 length) :
 {
 }
 
-LLMemoryStream::~LLMemoryStream()
-{
-}
-
-
diff --git a/indra/llcommon/llmemorystream.h b/indra/llcommon/llmemorystream.h
index e28f012192c309469dbf0913b1adcfd0dbdfca7c..7ce6372d114a0cf7f34590ad5f7ff4b70e2fd4da 100644
--- a/indra/llcommon/llmemorystream.h
+++ b/indra/llcommon/llmemorystream.h
@@ -50,7 +50,7 @@ class LL_COMMON_API LLMemoryStreamBuf : public std::streambuf
 {
 public:
 	LLMemoryStreamBuf(const U8* start, S32 length);
-	~LLMemoryStreamBuf();
+	~LLMemoryStreamBuf() = default;
 
 	void reset(const U8* start, S32 length);
 
@@ -72,7 +72,7 @@ class LL_COMMON_API LLMemoryStream : public std::istream
 {
 public:
 	LLMemoryStream(const U8* start, S32 length);
-	~LLMemoryStream();
+	~LLMemoryStream() = default;
 
 protected:
 	LLMemoryStreamBuf mStreamBuf;
diff --git a/indra/llcommon/llmetricperformancetester.cpp b/indra/llcommon/llmetricperformancetester.cpp
index f8a93baf452c0bd4cb2bb4dadb647808f5523aba..95dd8a3ab7bc2ff7ff82a32412bed8b4e03d7c6c 100644
--- a/indra/llcommon/llmetricperformancetester.cpp
+++ b/indra/llcommon/llmetricperformancetester.cpp
@@ -182,11 +182,7 @@ LLMetricPerformanceTesterBasic::LLMetricPerformanceTesterBasic(std::string name)
 	mValidInstance = LLMetricPerformanceTesterBasic::addTester(this) ;
 }
 
-LLMetricPerformanceTesterBasic::~LLMetricPerformanceTesterBasic() 
-{
-}
-
-void LLMetricPerformanceTesterBasic::preOutputTestResults(LLSD* sd) 
+void LLMetricPerformanceTesterBasic::preOutputTestResults(LLSD* sd)
 {
 	incrementCurrentCount() ;
 	(*sd)[getCurrentLabelName()]["Name"] = mName ;
@@ -324,12 +320,3 @@ void LLMetricPerformanceTesterWithSession::analyzePerformance(llofstream* os, LL
 	}
 }
 
-
-//----------------------------------------------------------------------------------------------
-// LLTestSession
-//----------------------------------------------------------------------------------------------
-
-LLMetricPerformanceTesterWithSession::LLTestSession::~LLTestSession() 
-{
-}
-
diff --git a/indra/llcommon/llmetricperformancetester.h b/indra/llcommon/llmetricperformancetester.h
index 2e99ed979df939396b3d2bcbbaaf40737cd3b9a7..325a819bb3e092c709a01fa75c14365d0bc3d3af 100644
--- a/indra/llcommon/llmetricperformancetester.h
+++ b/indra/llcommon/llmetricperformancetester.h
@@ -41,7 +41,7 @@ class LL_COMMON_API LLMetricPerformanceTesterBasic
 	 * @param[in] name - Unique string identifying this tester instance.
 	 */
 	LLMetricPerformanceTesterBasic(std::string name);
-	virtual ~LLMetricPerformanceTesterBasic();
+	virtual ~LLMetricPerformanceTesterBasic() = default;
 
 	/**
 	 * @return Returns true if the instance has been added to the tester map.
@@ -191,7 +191,7 @@ class LL_COMMON_API LLMetricPerformanceTesterWithSession : public LLMetricPerfor
 	class LL_COMMON_API LLTestSession
 		{
 		public:
-			virtual ~LLTestSession() ;
+			virtual ~LLTestSession() = default;
 		};
 
 	/**
diff --git a/indra/llcommon/llmetrics.cpp b/indra/llcommon/llmetrics.cpp
index d40afe5160805740494ec176c96c9a4f2e32cab5..e0561fbc79d90eab0bb0f1b9d7ee2802c597ac4e 100644
--- a/indra/llcommon/llmetrics.cpp
+++ b/indra/llcommon/llmetrics.cpp
@@ -36,8 +36,8 @@
 class LLMetricsImpl
 {
 public:
-	LLMetricsImpl() { }
-	~LLMetricsImpl();
+	LLMetricsImpl() = default;
+	~LLMetricsImpl() = default;
 
 	void recordEvent(const std::string& location, const std::string& mesg, bool success);
 	void printTotals(LLSD metadata);
@@ -50,11 +50,7 @@ class LLMetricsImpl
 	LLSD mMetricsMap;
 };
 
-LLMetricsImpl::~LLMetricsImpl()
-{
-}
-
-void LLMetricsImpl::recordEventDetails(const std::string& location, 
+void LLMetricsImpl::recordEventDetails(const std::string& location,
 									const std::string& mesg, 
 									bool success, 
 									LLSD stats)
diff --git a/indra/llcommon/llmutex.cpp b/indra/llcommon/llmutex.cpp
index 4d73c04d076ed565d55404790069653c3147c520..f32aaad1df12ab54c39a81518fec076c5812344b 100644
--- a/indra/llcommon/llmutex.cpp
+++ b/indra/llcommon/llmutex.cpp
@@ -37,11 +37,6 @@ LLMutex::LLMutex() :
 }
 
 
-LLMutex::~LLMutex()
-{
-}
-
-
 void LLMutex::lock()
 {
 	if(isSelfLocked())
@@ -139,11 +134,6 @@ LLCondition::LLCondition() :
 }
 
 
-LLCondition::~LLCondition()
-{
-}
-
-
 void LLCondition::wait()
 {
 	std::unique_lock< std::mutex > lock(mMutex);
diff --git a/indra/llcommon/llmutex.h b/indra/llcommon/llmutex.h
index 838d7d34c069271a4a81a13f4967e439e6eaaf93..31f363190fb513d6302c4c1cee28dd397b4d2874 100644
--- a/indra/llcommon/llmutex.h
+++ b/indra/llcommon/llmutex.h
@@ -46,7 +46,7 @@ class LL_COMMON_API LLMutex
 {
 public:
 	LLMutex();
-	virtual ~LLMutex();
+	virtual ~LLMutex() = default;
 	
 	void lock();		// blocks
 	bool trylock();		// non-blocking, returns true if lock held.
@@ -70,7 +70,7 @@ class LL_COMMON_API LLCondition : public LLMutex
 {
 public:
 	LLCondition();
-	~LLCondition();
+	~LLCondition() = default;
 	
 	void wait();		// blocks
 	void signal();
diff --git a/indra/llcommon/llnametable.h b/indra/llcommon/llnametable.h
index d3283543f3921f2d00e23ee5e1c06a6b3c2dbb64..347f011f3cacd8be46c7b7158143f69484560389 100644
--- a/indra/llcommon/llnametable.h
+++ b/indra/llcommon/llnametable.h
@@ -40,9 +40,7 @@ class LLNameTable
 	{
 	}
 
-	~LLNameTable() 
-	{ 
-	}
+	~LLNameTable()  = default;
 
 	void addEntry(const std::string& name, DATA data)
 	{
diff --git a/indra/llcommon/llprocess.cpp b/indra/llcommon/llprocess.cpp
index cc272432ba92ebf540f8dd0748f50638a5f107fa..053168cc88f47839e7dea7beb59fe6de9f242af0 100644
--- a/indra/llcommon/llprocess.cpp
+++ b/indra/llcommon/llprocess.cpp
@@ -133,7 +133,6 @@ static LLProcessListener sProcessListener;
 /*****************************************************************************
 *   WritePipe and ReadPipe
 *****************************************************************************/
-LLProcess::BasePipe::~BasePipe() {}
 const LLProcess::BasePipe::size_type
 	  // use funky syntax to call max() to avoid blighted max() macros
 	  LLProcess::BasePipe::npos((std::numeric_limits<LLProcess::BasePipe::size_type>::max)());
diff --git a/indra/llcommon/llprocess.h b/indra/llcommon/llprocess.h
index e3386ad88e49a7af005dc31007853698d6ddc752..0a0b6f0a3f8817cd490123c32feac4b6601faac8 100644
--- a/indra/llcommon/llprocess.h
+++ b/indra/llcommon/llprocess.h
@@ -366,7 +366,7 @@ class LL_COMMON_API LLProcess: public boost::noncopyable
 	class LL_COMMON_API BasePipe
 	{
 	public:
-		virtual ~BasePipe() = 0;
+		virtual ~BasePipe() = default;
 
 		typedef std::size_t size_type;
 		static const size_type npos;
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
index 9f175b1bac323fc8050b7cb4f6c0e81389a186a7..c7e1bf509c536a57ff3c48da0a1df414da688cd8 100644
--- a/indra/llcommon/llprocessor.cpp
+++ b/indra/llcommon/llprocessor.cpp
@@ -248,7 +248,7 @@ class LLProcessorInfoImpl
 		mProcessorInfo["config"] = LLSD::emptyMap();
 		mProcessorInfo["extension"] = LLSD::emptyMap();		
 	}
-	virtual ~LLProcessorInfoImpl() {}
+	virtual ~LLProcessorInfoImpl() = default;
 
 	F64 getCPUFrequency() const 
 	{ 
@@ -620,7 +620,7 @@ class LLProcessorInfoDarwinImpl : public LLProcessorInfoImpl
 		setInfo(eFrequency, (F64)frequency  / (F64)1000000);
 	}
 
-	virtual ~LLProcessorInfoDarwinImpl() {}
+	virtual ~LLProcessorInfoDarwinImpl() = default;
 
 private:
 	int getSysctlInt(const char* name)
@@ -747,7 +747,7 @@ class LLProcessorInfoLinuxImpl : public LLProcessorInfoImpl
 		get_proc_cpuinfo();
 	}
 
-	virtual ~LLProcessorInfoLinuxImpl() {}
+	virtual ~LLProcessorInfoLinuxImpl() = default;
 private:
 
 	void get_proc_cpuinfo()
@@ -899,7 +899,6 @@ LLProcessorInfo::LLProcessorInfo() : mImpl(NULL)
 }
 
 
-LLProcessorInfo::~LLProcessorInfo() {}
 F64MegahertzImplicit LLProcessorInfo::getCPUFrequency() const { return mImpl->getCPUFrequency(); }
 bool LLProcessorInfo::hasSSE() const { return mImpl->hasSSE(); }
 bool LLProcessorInfo::hasSSE2() const { return mImpl->hasSSE2(); }
diff --git a/indra/llcommon/llprocessor.h b/indra/llcommon/llprocessor.h
index 90e5bc59ee24638243342e814de4a761006f13c1..89c9cf4988ef28150cd1649f880040b11db787b1 100644
--- a/indra/llcommon/llprocessor.h
+++ b/indra/llcommon/llprocessor.h
@@ -35,7 +35,7 @@ class LL_COMMON_API LLProcessorInfo
 {
 public:
 	LLProcessorInfo(); 
- 	~LLProcessorInfo();
+ 	~LLProcessorInfo() = default;
 
 	F64MegahertzImplicit getCPUFrequency() const;
 	bool hasSSE() const;
diff --git a/indra/llcommon/llprocinfo.h b/indra/llcommon/llprocinfo.h
index e78bcf490aad1e218af394265072dea0763eb6f1..98dab9e144b41646b82a565af4dfbb1753b7b020 100644
--- a/indra/llcommon/llprocinfo.h
+++ b/indra/llcommon/llprocinfo.h
@@ -50,11 +50,10 @@ class LL_COMMON_API LLProcInfo
 
 	typedef U64 time_type;								/// Relative microseconds
 	
-private:
-	LLProcInfo();										// Not defined
-	~LLProcInfo();										// Not defined
-	LLProcInfo(const LLProcInfo &);						// Not defined
-	void operator=(const LLProcInfo &);					// Not defined
+	LLProcInfo() = delete;										// Not defined
+	~LLProcInfo() = delete;										// Not defined
+	LLProcInfo(const LLProcInfo &) = delete;						// Not defined
+	void operator=(const LLProcInfo &) = delete;					// Not defined
 
 public:
 	/// Get accumulated system and user CPU time in
diff --git a/indra/llcommon/llregistry.h b/indra/llcommon/llregistry.h
index 750fe9fdc8a0d3193e99cbcbf1c257d624324f77..ad87d50bb0e4837a86036c16515c6d23ac79b64a 100644
--- a/indra/llcommon/llregistry.h
+++ b/indra/llcommon/llregistry.h
@@ -123,8 +123,8 @@ class LLRegistry
 
 	protected:
 		// use currentRegistrar() or defaultRegistrar()
-		Registrar() {}
-		~Registrar() {}
+		Registrar() = default;
+		~Registrar() = default;
 
 	private:
 		registry_map_t											mMap;
@@ -134,10 +134,8 @@ class LLRegistry
 	typedef typename std::list<Registrar*>::iterator scope_list_iterator_t;
 	typedef typename std::list<Registrar*>::const_iterator scope_list_const_iterator_t;
 	
-	LLRegistry() 
-	{}
-
-	~LLRegistry() {}
+	LLRegistry() = default;
+	~LLRegistry() = default;
 
 	ptr_value_t getValue(ref_const_key_t key)
 	{
@@ -305,7 +303,7 @@ class LLRegistrySingleton
 	class StaticRegistrar : public registry_t::Registrar
 	{
 	public:
-		virtual ~StaticRegistrar() {}
+		virtual ~StaticRegistrar() = default;
 		StaticRegistrar(ref_const_key_t key, ref_const_value_t value)
 		{
 			if (singleton_t::instance().exists(key))
diff --git a/indra/llcommon/llrun.cpp b/indra/llcommon/llrun.cpp
index f5d3f302fa0daf78ab4602c51c2157331d1de0db..0c4040c0e0ffc24401d0d0a7150f42d2c8109d95 100644
--- a/indra/llcommon/llrun.cpp
+++ b/indra/llcommon/llrun.cpp
@@ -165,10 +165,3 @@ LLRunner::LLRunInfo::LLRunInfo(
 	mIncrement(increment)
 {
 }
-
-LLRunnable::LLRunnable()
-{ }
-
-// virtual
-LLRunnable::~LLRunnable()
-{ }
diff --git a/indra/llcommon/llrun.h b/indra/llcommon/llrun.h
index a1174053667fbd82b7620381fe572b10eeddb012..88c1c8f3fbb2893ffb350086f23b1fa3a0b7c658 100644
--- a/indra/llcommon/llrun.h
+++ b/indra/llcommon/llrun.h
@@ -146,8 +146,8 @@ class LL_COMMON_API LLRunner
 class LL_COMMON_API LLRunnable
 {
 public:
-	LLRunnable();
-	virtual ~LLRunnable();
+	LLRunnable() = default;
+	virtual ~LLRunnable() = default;
 
 	/** 
 	 * @brief Do the process.
diff --git a/indra/llcommon/llsafehandle.h b/indra/llcommon/llsafehandle.h
index 817e0de0ae4246bcda50151dd772649be61fe8b2..4aab8f41fae99871ebbc03dfbaa57fb7bc0dc1c1 100644
--- a/indra/llcommon/llsafehandle.h
+++ b/indra/llcommon/llsafehandle.h
@@ -181,7 +181,7 @@ class LLSafeHandle
 	class NullInstanceHolder final : public LLSingleton<NullInstanceHolder>
 	{
 		LLSINGLETON_EMPTY_CTOR(NullInstanceHolder);
-		~NullInstanceHolder() {}
+		~NullInstanceHolder() = default;
 	public:
 		Type mNullInstance;
 	};
diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp
index 307ab849a52099c8b274d7e69941b32fba252ea4..94d1141e1fa35249d5f75a4907546554a4994019 100644
--- a/indra/llcommon/llsdserialize.cpp
+++ b/indra/llcommon/llsdserialize.cpp
@@ -325,10 +325,6 @@ LLSDParser::LLSDParser()
 {
 }
 
-// virtual
-LLSDParser::~LLSDParser()
-{ }
-
 S32 LLSDParser::parse(std::istream& istr, LLSD& data, S32 max_bytes, S32 max_depth)
 {
 	mCheckLimits = (LLSDSerialize::SIZE_UNLIMITED == max_bytes) ? false : true;
@@ -406,13 +402,6 @@ void LLSDParser::account(S32 bytes) const
 /**
  * LLSDNotationParser
  */
-LLSDNotationParser::LLSDNotationParser()
-{
-}	
-
-// virtual
-LLSDNotationParser::~LLSDNotationParser()
-{ }
 
 // virtual
 S32 LLSDNotationParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) const
@@ -875,14 +864,6 @@ bool LLSDNotationParser::parseBinary(std::istream& istr, LLSD& data) const
 /**
  * LLSDBinaryParser
  */
-LLSDBinaryParser::LLSDBinaryParser()
-{
-}
-
-// virtual
-LLSDBinaryParser::~LLSDBinaryParser()
-{
-}
 
 // virtual
 S32 LLSDBinaryParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) const
@@ -1242,10 +1223,6 @@ LLSDFormatter::LLSDFormatter(bool boolAlpha, const std::string& realFmt, EFormat
     realFormat(realFmt);
 }
 
-// virtual
-LLSDFormatter::~LLSDFormatter()
-{ }
-
 void LLSDFormatter::boolalpha(bool alpha)
 {
 	mBoolAlpha = alpha;
@@ -1282,10 +1259,6 @@ LLSDNotationFormatter::LLSDNotationFormatter(bool boolAlpha, const std::string&
 {
 }
 
-// virtual
-LLSDNotationFormatter::~LLSDNotationFormatter()
-{ }
-
 // static
 std::string LLSDNotationFormatter::escapeString(const std::string& in)
 {
@@ -1467,10 +1440,6 @@ LLSDBinaryFormatter::LLSDBinaryFormatter(bool boolAlpha, const std::string& real
 {
 }
 
-// virtual
-LLSDBinaryFormatter::~LLSDBinaryFormatter()
-{ }
-
 // virtual
 S32 LLSDBinaryFormatter::format_impl(const LLSD& data, std::ostream& ostr,
 									 EFormatterOptions options, U32 level) const
diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h
index d6079fd9fa81c9cfecd29c84a7be6921432a29d9..b24ef9d9c477605278510a1f5936b9659a85af42 100644
--- a/indra/llcommon/llsdserialize.h
+++ b/indra/llcommon/llsdserialize.h
@@ -44,7 +44,7 @@ class LL_COMMON_API LLSDParser : public LLRefCount
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDParser();
+	virtual ~LLSDParser() = default;
 
 public:
 	/** 
@@ -223,13 +223,13 @@ class LL_COMMON_API LLSDNotationParser : public LLSDParser
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDNotationParser();
+	virtual ~LLSDNotationParser() = default;
 
 public:
 	/** 
 	 * @brief Constructor
 	 */
-	LLSDNotationParser();
+	LLSDNotationParser() = default;
 
 protected:
 	/** 
@@ -350,13 +350,13 @@ class LL_COMMON_API LLSDBinaryParser : public LLSDParser
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDBinaryParser();
+	virtual ~LLSDBinaryParser() = default;
 
 public:
 	/** 
 	 * @brief Constructor
 	 */
-	LLSDBinaryParser();
+	LLSDBinaryParser() = default;
 
 protected:
 	/** 
@@ -419,7 +419,7 @@ class LL_COMMON_API LLSDFormatter : public LLRefCount
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDFormatter();
+	virtual ~LLSDFormatter() = default;
 
 public:
 	/**
@@ -515,7 +515,7 @@ class LL_COMMON_API LLSDNotationFormatter : public LLSDFormatter
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDNotationFormatter();
+	virtual ~LLSDNotationFormatter() = default;
 
 public:
 	/** 
@@ -559,7 +559,7 @@ class LL_COMMON_API LLSDXMLFormatter : public LLSDFormatter
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDXMLFormatter();
+	virtual ~LLSDXMLFormatter() = default;
 
 public:
 	/** 
@@ -631,7 +631,7 @@ class LL_COMMON_API LLSDBinaryFormatter : public LLSDFormatter
 	/** 
 	 * @brief Destructor
 	 */
-	virtual ~LLSDBinaryFormatter();
+	virtual ~LLSDBinaryFormatter() = default;
 
 public:
 	/** 
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
index 772924397df589144ecdbc09d2fbcbeec80cbc1c..e3289fafeb781deddc664c184107e5d2642a3dfb 100644
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -51,11 +51,6 @@ LLSDXMLFormatter::LLSDXMLFormatter(bool boolAlpha, const std::string& realFormat
 {
 }
 
-// virtual
-LLSDXMLFormatter::~LLSDXMLFormatter()
-{
-}
-
 // virtual
 S32 LLSDXMLFormatter::format(const LLSD& data, std::ostream& ostr,
 							 EFormatterOptions options) const
diff --git a/indra/llcommon/llsimplehash.h b/indra/llcommon/llsimplehash.h
index 727b4568d85eb185d1be5e92300e3f6d2345fe2a..4baeeac0e0b006d53d85abd9a74bec27c6df524e 100644
--- a/indra/llcommon/llsimplehash.h
+++ b/indra/llcommon/llsimplehash.h
@@ -40,9 +40,7 @@ class LLSimpleHashEntry
 		mNextEntry(0)
 	{
 	}
-	virtual ~LLSimpleHashEntry()
-	{
-	}
+	virtual ~LLSimpleHashEntry() = default;
 	HASH_KEY_TYPE getHashKey() const
 	{
 		return mHashKey;
@@ -67,9 +65,7 @@ class LL_COMMON_API LLSimpleHash
 		llassert((TABLE_SIZE ^ (TABLE_SIZE-1)) == (TABLE_SIZE | (TABLE_SIZE-1))); // power of 2
 		memset(mEntryTable, 0, sizeof(mEntryTable));
 	}
-	virtual ~LLSimpleHash()
-	{
-	}
+	virtual ~LLSimpleHash() = default;
 
 	virtual int getIndex(HASH_KEY_TYPE key)
 	{
diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp
index 73ebabe7a1b689d1311443475a70fc5649b55097..7493ba64238a56f78e990e47b14fb8b12171fc4f 100644
--- a/indra/llcommon/llsingleton.cpp
+++ b/indra/llcommon/llsingleton.cpp
@@ -202,8 +202,6 @@ LLSingletonBase::list_t::size_type LLSingletonBase::get_initializing_size()
     return MasterList::LockedInitializing().get().size();
 }
 
-LLSingletonBase::~LLSingletonBase() {}
-
 void LLSingletonBase::push_initializing(const char* name)
 {
     MasterList::LockedInitializing locked_list;
diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h
index 8f5998c1fe7cdd6e1b84fdb1e309b50080647b92..24c54ae35664dc9266314ea56148bbf23ffbc960 100644
--- a/indra/llcommon/llsingleton.h
+++ b/indra/llcommon/llsingleton.h
@@ -78,7 +78,7 @@ class LLSingletonBase: private boost::noncopyable
     // constructor, which passes tag<DERIVED_TYPE> for various purposes.
     template <typename DERIVED_TYPE>
     LLSingletonBase(tag<DERIVED_TYPE>);
-    virtual ~LLSingletonBase();
+    virtual ~LLSingletonBase() = default;
 
     // Every new LLSingleton should be added to/removed from the master list
     void add_master();
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index 26338daaf7ed9188e101bfa54ade48693f2325a8..d7ea47927f7ae68953fcdb7a11c1c0c8ebf3e607 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -27,7 +27,14 @@
 #ifndef LL_LLSTRING_H
 #define LL_LLSTRING_H
 
+#if LL_GNUC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-copy-dtor"
+#endif
 #include <boost/optional/optional.hpp>
+#if LL_GNUC
+#pragma GCC diagnostic pop
+#endif
 #include <string>
 #include <cstdio>
 //#include <locale>
@@ -913,7 +920,7 @@ struct InString
 		mIter(b),
 		mEnd(e)
 	{}
-	virtual ~InString() {}
+	virtual ~InString() = default;
 
 	bool done() const { return mIter == mEnd; }
 	/// Is the current character (*mIter) escaped? This implementation can
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index 3b11878f1dffb69b6323b710d4f84d5365bc7a1a..cad07734bc26cc7b4d9467d2077facd09341b5eb 100644
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -444,9 +444,3 @@ LLThreadSafeRefCount::~LLThreadSafeRefCount()
 }
 
 //============================================================================
-
-LLResponder::~LLResponder()
-{
-}
-
-//============================================================================
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
index 5cd0731f6c9248ea7061b0b9f3939d4149f2cdf7..ebd13226fd8e5dcb83969972e59ed2c08672c71f 100644
--- a/indra/llcommon/llthread.h
+++ b/indra/llcommon/llthread.h
@@ -146,7 +146,7 @@ class LL_COMMON_API LLThread
 class LL_COMMON_API LLResponder : public LLThreadSafeRefCount
 {
 protected:
-    virtual ~LLResponder();
+    virtual ~LLResponder() = default;
 public:
     virtual void completed(bool success) = 0;
 };
diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h
index 0d0cd6f581f1d1832aaa81cd045f1c542575c25a..b0c6a0a6ea362fe91ba446320c1c78ae0e3036c1 100644
--- a/indra/llcommon/lltrace.h
+++ b/indra/llcommon/lltrace.h
@@ -57,7 +57,7 @@ class StatBase
 {
 public:
 	StatBase(const char* name, const char* description);
-	virtual ~StatBase()	{}
+	virtual ~StatBase() = default;
 	virtual const char* getUnitLabel() const;
 
 	const std::string& getName() const { return mName; }
@@ -484,8 +484,7 @@ class MemTrackable : public MemTrackableNonVirtual<DERIVED, ALIGNMENT>
 	:	MemTrackableNonVirtual<DERIVED, ALIGNMENT>(name)
 	{}
 
-	virtual ~MemTrackable()
-	{}
+	virtual ~MemTrackable() = default;
 };
 }
 
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index d0b4a842a64aee82b234b894551b9df94ac1161e..dae8d536106f3f0e9f8df7d5757c5070eba6d46a 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -37,7 +37,7 @@
 class LLStopWatchControlsMixinCommon
 {
 public:
-	virtual ~LLStopWatchControlsMixinCommon() {}
+	virtual ~LLStopWatchControlsMixinCommon() = default;
 
 	enum EPlayState
 	{
diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp
index e9a60d9ced4b028e2fcf2ccc44011652960202f5..e15b87b970eadfeb249a2271c325684c53d2a2df 100644
--- a/indra/llcommon/lluri.cpp
+++ b/indra/llcommon/lluri.cpp
@@ -427,10 +427,6 @@ LLURI::LLURI(const std::string& scheme,
 	mEscapedOpaque = opaque.str();
 }
 
-LLURI::~LLURI()
-{
-}
-
 // static
 LLURI LLURI::buildHTTP(const std::string& prefix,
 					   const LLSD& path)
diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h
index b8fca0ca5162bd3fec32da9bada17268205a86b3..f3542c418374de131b4cc422ddaf4c0d2b54125f 100644
--- a/indra/llcommon/lluri.h
+++ b/indra/llcommon/lluri.h
@@ -56,7 +56,7 @@ class LL_COMMON_API LLURI
 	  
   // construct from escaped string, as would be transmitted on the net
 
-	~LLURI();
+	~LLURI() = default;
 
 	static LLURI buildHTTP(
 		const std::string& prefix,
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index fcd7eb89d29b7a906a9aa9f8bd8b786627efdaad..774fdb83614f25b7d09aa05869969ec46459b51d 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -174,10 +174,6 @@ LLWorkerThread::WorkRequest::WorkRequest(handle_t handle, U32 priority, LLWorker
 {
 }
 
-LLWorkerThread::WorkRequest::~WorkRequest()
-{
-}
-
 // virtual (required for access by LLWorkerThread)
 void LLWorkerThread::WorkRequest::deleteRequest()
 {
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index ca144c9e39c27f7ecdacac9a25f48d9315f73c43..dfe803093989fe891c5641229ac83ffcd6cda00f 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -53,7 +53,7 @@ class LL_COMMON_API LLWorkerThread : public LLQueuedThread
 	class WorkRequest : public LLQueuedThread::QueuedRequest
 	{
 	protected:
-		virtual ~WorkRequest(); // use deleteRequest()
+		virtual ~WorkRequest() = default; // use deleteRequest()
 		
 	public:
 		WorkRequest(handle_t handle, U32 priority, LLWorkerClass* workerclass, S32 param);
diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h
index 9ad8ea7eebd589681d19fcfca335b1f79be8c524..e7626da292b92baf76722c33be208b1811968b1b 100644
--- a/indra/newview/llviewerassettype.h
+++ b/indra/newview/llviewerassettype.h
@@ -41,9 +41,9 @@ class LLViewerAssetType : public LLAssetType
 	static void 				generateDescriptionFor(LLViewerAssetType::EType asset_type,
 													   std::string& description);
 	static EDragAndDropType   	lookupDragAndDropType(EType asset_type);
-protected:
-	LLViewerAssetType() {}
-	~LLViewerAssetType() {}
+
+	LLViewerAssetType() = delete;
+	~LLViewerAssetType() = delete;
 };
 
 #endif // LL_LLVIEWERASSETTYPE_H