Manca la definizione della variabile sm_ptr che in quanto static DEVE essere esterna alla dichiarazione della classe.
Inoltre essendo la classe un template, la variabile DEVE essere indicata nel template.
Il typedef eventualmente va fatto dopo.

Riporto in rosso sotto.
codice:
	template<class T>
	class CEGUISingletonX
	{
		private:
			class _InstPtr
			{
				public:
					_InstPtr() : m_ptr(0) {}
					~_InstPtr() { delete m_ptr; }
					T* get() { return m_ptr; }
					void Set(T* p)
					{
			            		if(p!= 0)
					        {
							delete m_ptr;
			                		m_ptr = p;
					        }
			        	}
			    private:
					T* m_ptr;
			};

			static _InstPtr sm_ptr;
			CEGUISingletonX();
			CEGUISingletonX(const CEGUISingletonX&);
			CEGUISingletonX& operator=(const CEGUISingletonX&);

		public:
			static T& getSingleton()
			{
				if(sm_ptr.get() == 0)
				{
		            		sm_ptr.Set(new T());
		        	}
				return *sm_ptr.get();
			}

			static T* getSingletonPtr()
			{
				if(sm_ptr.get() == 0)
				{
		        		sm_ptr.Set(new T());
		        	}
				return sm_ptr.get();
			}
	};
        template <class T>
        CEGUISingletonX<T>::_InstPtr CEGUISingletonX<T>::sm_ptr;

        typedef CEGUISingletonX<CCommonFileDialog> CommonFileDialog;