This is absolutely correct. Most of the time, the #pragma will work, but
not all of the time. Read the article for more details, but in general the
"pragma disable" approach is the way to go.
> After _I_ added this #pragma, the warning never showed up again :-))
> But I just found THIS in the MSKB:
> "
> BUG: C4786 Warning Is Not Disabled with #pragma Warning
> --------------------------------------------------------------------------
--
> ----
> The information in this article applies to:
> Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0
> --------------------------------------------------------------------------
--
> ----
> SYMPTOMS
> Warnings similar to the following are generated even if you use the
warning
> pragma to disable the warning:
> warning C4786:
> 'std::rb_tree<CAiSpanningTree<State,std::less<State>>::TransClosureNode,
> CAiSpanningTree<State,std::less<State>>::TransClosureNode,std::ident<Cai
> SpanningTree<State,std::less<State>>::TransClosureNode,CAiSpanningTree<S
> tate,std::less<State>>::TransClosureNode>,std::less<CAiSpanningTree<Stat
> e,std::less<State>>::TransClosureNode>>' : identifier was truncated to
'255'
> characters in the debug information
> The code:
> #pragma warning(disable:4786)
> disables warnings that list the file and line number. For example:
> C:\test\Text.cpp(25) : warning C4786:
> STATUS
> Microsoft has confirmed this to be a bug in the Microsoft products listed
at
> the beginning of this article.
> MORE INFORMATION
> This warning can be ignored. However, the identifier may not be accessible
> or viewable in the de{*filter*}.
> Sample Code
> /*
> Compiler Options: /Zi
> */
> #include <stddef.h>
> #include <new.h>
> #pragma warning(disable:4786)
> namespace std {
> template <class T, class U> struct ident {};
> template <class T1, class T2> struct pair {};
> template <class Arg1, class Arg2, class Result>
> struct binary_function {};
> template <class T>struct less : binary_function<T, T, bool> {};
> template <class T, class Distance> struct bidirectional_iterator {};
> template <class Key, class Value, class KeyOfValue, class Compare>
> class rb_tree {
> public:
> typedef int size_type;
> typedef int difference_type;
> typedef void* link_type;
> struct rb_tree_node {};
> typedef Key key_type;
> class iterator : public bidirectional_iterator<Value,
> difference_type> {};
> class const_iterator : public
> bidirectional_iterator<Value,difference_type> {
> protected:
> link_type node;
> const_iterator(link_type x) : node(x) {}
> };
> public:
> size_type count(const key_type& x) const;
> };
> template <class Key, class Value, class KeyOfValue,
> class Compare>
> rb_tree<Key, Value, KeyOfValue, Compare>::size_type
> rb_tree<Key, Value, KeyOfValue, Compare>::
> count(const Key& k) const {
> size_type n = 0;
> return n;
> };
> template <class Key, class Compare> class set {
> typedef ::std::rb_tree<Key, Key,ident<Key, Key>, Compare>
> rep_type;
> rep_type t;
> };
> }
> template <class Node, class Compare>class CAiTransitiveClosure{
> public:
> typedef std::set<Node, Compare > NodeSet; NodeSet m_todo;
> };
> template <class Node, class Compare> class CAiSpanningTree {
> public:
> typedef std::set<Node, Compare > NodeSet;
> protected:
> typedef Node CAiSpanningTreeNode;
> typedef NodeSet CAiSpanningTreeNodeSet;
> private:
> struct TransClosureNode {};
> struct TransClosureGraph
> : public CAiTransitiveClosure<TransClosureNode,
> std::less<TransClosureNode> >
> {};
> public:
> CAiSpanningTree(const Node& initialNode);
> CAiSpanningTree(const NodeSet& initialNodes);
> };
> struct State { };
> class CformSpanningTree:public CAiSpanningTree<State,std::less<State>>
> {
> public:
> CFormSpanningTree( NodeSet initial)
> : CAiSpanningTree<State, std::less<State> >(initial)
> {}
> };
> Keywords : kbcode kbtool kbCompiler kbVC500bug kbVC600bug
> Version : winnt:5.0,6.0
> Platform : winnt
> Issue type : kbbug
> Technology : kbvc
> "
> > Just ran across another post asking the same question... but pls let me
> know
> > if anybody else has any other tips.
> > Thanks