<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Форум 'C/C++' на RSDN.RU</title>
    <link>http://www.rsdn.ru/Forum/cpp/</link>
    <description>Программирование на C++. No VCL, no MFC, pure C++ only.</description>
    <category>cpp</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN.ru, 2001-2007</copyright>
    <webMaster>webmaster@rsdn.ru</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://www.rsdn.ru/rsdn.gif</url>
      <title>RSDN.RU</title>
      <link>http://www.rsdn.ru</link>
    </image>
    <lastBuildDate>Tue, 09 Feb 2010 13:42:32 GMT</lastBuildDate>
    <ttl>5</ttl>
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rsdn/cpp" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="rsdn/cpp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>template в MSVC 6.0 и MSVC 2008</title>
		<link>http://www.rsdn.ru/Forum/cpp/3698678.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3698678.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3698678.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3698678</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3698678.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3698678</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;ошибся немного.. в предыдущем не так:&lt;br /&gt;
    "&lt;br /&gt;
    НО не выругалась так:&lt;br /&gt;
&lt;br /&gt;
   &lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
   MySimpleTemplate&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt; x(45);
   &lt;span class='kw'&gt;int&lt;/span&gt; i;
   i = x;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
   "&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
а вот так :&lt;br /&gt;
&lt;br /&gt;
   "&lt;br /&gt;
   НО не выругалась так:&lt;br /&gt;
   &lt;br /&gt;
   &lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
   MySimpleTemplate&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt; x(45);
   &lt;span class='kw'&gt;int&lt;/span&gt; i;
   i = x + 5;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
   "&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/GcAqirbdS08" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Tue, 09 Feb 2010 12:40:43 GMT</pubDate>
		
			<author>ZigaZaga &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Стандарт перевода wchar_t в char</title>
		<link>http://www.rsdn.ru/Forum/cpp/3698242.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3698242.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3698242.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3698242</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3698242.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3698242</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Подскажите, гуру, что на данный момент является стандартом С++ преобразования из wchar_t в char?&lt;br /&gt;
Нарыл вагон примеров. Все работает, но мне надо для тестового задания точно знать, как ПРАВИЛЬНО и переносимо сделать преобразование.&lt;br /&gt;
Например, вывести в поток ofstream строку wchar_t (не двоичным образом, а предврительным преобразованием в char).&lt;br /&gt;
Заранее спасибо.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/AFuUPeNiFV8" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Tue, 09 Feb 2010 07:33:53 GMT</pubDate>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Об изучении STL</title>
		<link>http://www.rsdn.ru/Forum/cpp/3697962.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3697962.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3697962.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3697962</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3697962.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3697962</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Пытаясь разобраться, как реализованы алгоритмы стандартной библиотеки, приходится продираться через заборы #ifdef, отладочных макросов, да и просто через, так сказать, своеобразный coding style (реализация от MS, другие пока не пробовал).&lt;br /&gt;
Тут же захотелось странного &amp;mdash; а что, если создать реализацию STL (хотя бы только в виде контейнеры + алгоритмы), предназначенную исключительно для учебных целей &amp;mdash; т.е. максимально прозрачный код, снабженный комментариями и документацией. Существует ли что-нибудь подобное?&lt;br /&gt;
&lt;br /&gt;
Да, еще интересно &amp;mdash; какая из книг по STL максимально описывает ее "внутренности"? Я понимаю, что существуют разные реализации, но на всех них налагает свои требования Стандарт, так что различия не должны быть принципиальны.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/6kSqlwuK9VQ" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Mon, 08 Feb 2010 20:09:11 GMT</pubDate>
		
			<author>cpp_beginner &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>3</slash:comments>
		
	</item>

	<item>
		<title>template в MSVC 6.0 и MSVC 2008</title>
		<link>http://www.rsdn.ru/Forum/cpp/3697752.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3697752.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3697752.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3697752</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3697752.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3697752</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Добрый день!&lt;br /&gt;
не понятно поведение студий с таким кодом :&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;
&lt;span class='kw'&gt;template&lt;/span&gt; &amp;lt;&lt;span class='kw'&gt;class&lt;/span&gt; T&amp;gt;
&lt;span class='kw'&gt;class&lt;/span&gt; MySimpleTemplate 
{
    T n;
&lt;span class='kw'&gt;public&lt;/span&gt;:
    &lt;span class='kw'&gt;explicit&lt;/span&gt; MySimpleTemplate ( T nn)
    {
        &lt;span class='kw'&gt;this&lt;/span&gt;-&amp;gt;n = nn;
    }
    &lt;span class='kw'&gt;operator&lt;/span&gt; T &amp;amp; ()
    {
        &lt;span class='kw'&gt;return this&lt;/span&gt;-&amp;gt;n;
    }
};

&lt;span class='kw'&gt;void&lt;/span&gt; main(&lt;span class='kw'&gt;void&lt;/span&gt;)
{
    MySimpleTemplate&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt; x(45);
    &lt;span class='kw'&gt;int&lt;/span&gt; i = 16;
    x = i;
    x = i + 5;
    x = 15;
    std::cout &amp;lt;&amp;lt; x &amp;lt;&amp;lt; std::endl;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
MSVC 6.0 ругаеться только на эту строчку :&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
x = i;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
и перестаёт ругаться, если изменить строчку так :&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
(&lt;span class='kw'&gt;int&lt;/span&gt; &amp;amp;)x = i;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
MSVC 2008 ругаеться же на всё ТРИ строчки : &lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
x = i;
x = i + 5;
x = 15;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
и опять же. перестаёт если так : &lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
(&lt;span class='kw'&gt;int&lt;/span&gt; &amp;amp;)x = i;
(&lt;span class='kw'&gt;int&lt;/span&gt; &amp;amp;)x = i + 5;
(&lt;span class='kw'&gt;int&lt;/span&gt; &amp;amp;)x = 15;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
намекните хоть что происходит???&lt;br /&gt;
&lt;br /&gt;
&lt;div class='mod'&gt;08.02.10 20:17: Перенесено модератором из 'C/C++. Прикладные вопросы' &amp;mdash; Кодт&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/hICo9wfDBHc" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Mon, 08 Feb 2010 16:12:30 GMT</pubDate>
		
			<author>ZigaZaga &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>18</slash:comments>
		
	</item>

	<item>
		<title>непонятка со статическими переменными</title>
		<link>http://www.rsdn.ru/Forum/cpp/3697690.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3697690.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3697690.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3697690</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3697690.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3697690</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Здравствуйте! Помогите разобраться, плиз. &lt;br /&gt;
Есть у класса такой метод:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='com'&gt;// Сохранение значения прочитанной с оборудования переменной во внутреннем КЭШе (в соответствующем переменной тэге)&lt;/span&gt;
&lt;span class='kw'&gt;void&lt;/span&gt; COpcInnerTransaction::SaveValueInCache(CAddressSpace* pAddressSpace , VARIANT varValue)
{
    &lt;span class='kw'&gt;static&lt;/span&gt; CBoundaryNodeIndexes BoundaryNodes = pAddressSpace-&amp;gt;getBoundaryNodeIndexes(m_DeviceID);

    &lt;span class='kw'&gt;static int&lt;/span&gt; CurrentIndex = BoundaryNodes.Start;
    &lt;span class='kw'&gt;static int&lt;/span&gt; EndIndex = BoundaryNodes.End;

    CurrentIndex = pAddressSpace-&amp;gt;SaveValue(CurrentIndex, EndIndex, varValue);
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Он вызывается несколько раз, затем экземпляр класса COpcInnerTransaction &lt;b&gt;удаляется&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Через время N экземпляр вновь создается, и происходит серия аналогичных вызовов. Мне непонятно, почему &lt;b&gt;уже при 1-м вызове&lt;/b&gt; значение всех статических переменных внутри метода равно тем значениям, которые были на последнем вызове до удаления объекта.&lt;br /&gt;
У меня ведь нестатический метод. И объект я &lt;b&gt;удаляю из памяти&lt;/b&gt;! А потом создаю, и хоп! Функция все помнит. А мне ето не надо...&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/LUoQ6eTi1BQ" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Mon, 08 Feb 2010 15:02:27 GMT</pubDate>
		
			<author>agendus &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>9</slash:comments>
		
	</item>

	<item>
		<title>CStupidClassName</title>
		<link>http://www.rsdn.ru/Forum/cpp/3696938.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3696938.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3696938.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3696938</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3696938.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3696938</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Повторение, как говорится, мать учения. &lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/biggrin.gif' /&gt;&lt;br /&gt;
&lt;br /&gt;
Попробовал собрать е-Мула 2010й Студией:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
Error    2    error LNK2005: &lt;span class='str'&gt;"public: virtual __thiscall CMemDC::~CMemDC(void)"&lt;/span&gt; (??1CMemDC@@UAE@XZ) already defined in ProgressCtrlX.obj    uafxcwd.lib(afxglobals.obj)    emule&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Что же это? В MFC появился &lt;a href="http://msdn.microsoft.com/en-us/library/cc308997.aspx" class="m" target="_blank"&gt;class CMemDC&lt;/a&gt;, а е-мул уже использует &lt;a href="http://www.codeproject.com/KB/GDI/flickerfree.aspx" class="m" target="_blank"&gt;Flicker Free Drawing In MFC&lt;/a&gt;. Кому из них придётся подвинуться, в общем то и не вопрос.&lt;div class='tagline'&gt;.&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/szMyYpUvGVU" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Sun, 07 Feb 2010 20:11:21 GMT</pubDate>
		
			<author>gear nuke &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>Определить сравниваемость типов</title>
		<link>http://www.rsdn.ru/Forum/cpp/3696614.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3696614.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3696614.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3696614</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3696614.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3696614</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Всем привет.&lt;br /&gt;
&lt;br /&gt;
Задача проста, как пять копеек &amp;mdash; есть 2 типа. Необходимо в компайл-тайм определить, сравниваемы ли они, т.е. можно ли, например, написать T1() == T2().&lt;br /&gt;
Попробовал поиграть со SFINAE, не работает (причем в комо и в VC8 не работает по разному):&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;struct&lt;/span&gt; X
{
};

&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt;
&lt;span class='kw'&gt;struct&lt;/span&gt; comp
{
};

&lt;span class='kw'&gt;template&lt;/span&gt; &amp;lt;&lt;span class='kw'&gt;class&lt;/span&gt; T, &lt;span class='kw'&gt;class&lt;/span&gt; U&amp;gt;
&lt;span class='kw'&gt;struct&lt;/span&gt; is_comparable
{
    &lt;span class='kw'&gt;typedef char&lt;/span&gt; no_type;
    &lt;span class='kw'&gt;struct&lt;/span&gt; yes_type
    {
        no_type data[2];
    };

    &lt;span class='kw'&gt;static&lt;/span&gt; no_type check(...);
    &lt;span class='kw'&gt;template&lt;/span&gt; &amp;lt;&lt;span class='kw'&gt;class&lt;/span&gt; T1, &lt;span class='kw'&gt;class&lt;/span&gt; U1&amp;gt;
    &lt;span class='kw'&gt;static&lt;/span&gt; yes_type check(T1 *, U1 *, comp&amp;lt;&lt;span class='kw'&gt;sizeof&lt;/span&gt;(T1() == U1())&amp;gt; * = 0);
    &lt;span class='kw'&gt;enum&lt;/span&gt; {value = &lt;span class='kw'&gt;sizeof&lt;/span&gt;(check((T *)0, (U *)0)) == &lt;span class='kw'&gt;sizeof&lt;/span&gt;(yes_type)};
};

&lt;span class='kw'&gt;int&lt;/span&gt; main()
{
    &lt;span class='kw'&gt;char&lt;/span&gt; t[is_comparable&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;, X&amp;gt;::value];
    &lt;span class='kw'&gt;char&lt;/span&gt; t1[is_comparable&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;, &lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt;::value];
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
В комо результат всегда 0, в VC8 1. Есть ли шансы докрутить это до работоспособности или без вариантов?&lt;br /&gt;
Спасибо!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/sVokO_aEfX0" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Sun, 07 Feb 2010 11:04:07 GMT</pubDate>
		
			<author>Andrew S &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>10</slash:comments>
		
	</item>

	<item>
		<title>Отладка макросов</title>
		<link>http://www.rsdn.ru/Forum/cpp/3696241.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3696241.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3696241.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3696241</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3696241.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3696241</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Как сделать чтобы Visual Studio 2008 видя что вызывается #define макрос при отладке входила в тело макроса?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/zTA4ddLJ_HM" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Sat, 06 Feb 2010 17:04:30 GMT</pubDate>
		
		
			<slash:comments>20</slash:comments>
		
	</item>

	<item>
		<title>запретить включать set в класс</title>
		<link>http://www.rsdn.ru/Forum/cpp/3695841.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3695841.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3695841.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3695841</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3695841.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3695841</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;привет всем!&lt;br /&gt;
такая задача по горячим следам:&lt;br /&gt;
есть Base и куча Derived. хотим запретить использовать класс set внутри новеньких. &lt;br /&gt;
использовать как&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; DerivedNextGeneration : &lt;span class='kw'&gt;public&lt;/span&gt; Derived
{
...
set&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt; * my_var &lt;span class='com'&gt;// да!&lt;/span&gt;
set&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt; my_var &lt;span class='com'&gt;// нет!&lt;/span&gt;
...
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
измучился и никак не пойму, можно ли что-нибудь придумать. &lt;br /&gt;
&lt;br /&gt;
спасибо еще раз всем за помощь!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/-VWt_BkYMfU" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Sat, 06 Feb 2010 00:00:17 GMT</pubDate>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Странные ошибки при сравнении std::string</title>
		<link>http://www.rsdn.ru/Forum/cpp/3695603.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3695603.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3695603.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3695603</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3695603.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3695603</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Игрался с разными STL-ными контейнерами, и несколько раз напарывался на странные ошибки, практически на пустом месте. Например:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
    priority_queue&amp;lt;string, deque&amp;lt;string&amp;gt; &amp;gt; pq2;
    &lt;span class='com'&gt;// Что-то с оператором &amp;gt;?&lt;/span&gt;
    pq2.push(&lt;span class='str'&gt;"aaaa"&lt;/span&gt;);
    pq2.push(&lt;span class='str'&gt;"bbbb"&lt;/span&gt;);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
За что нравятся шаблоны, такие понятные сообщения об ошибках:&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;c:\program files\microsoft visual studio 8\vc\include\functional(143) : error C2784: 'bool std::operator &amp;lt;(const std::queue&amp;lt;_Ty,_Container&amp;gt; &amp;amp;,const std::queue&amp;lt;_Ty,_Container&amp;gt; &amp;amp;)' : could not deduce template argument for 'const std::queue&amp;lt;_Ty,_Container&amp;gt; &amp;amp;' from 'const std::basic_string&amp;lt;_Elem,_Traits,_Ax&amp;gt;'&lt;br /&gt;
        with&lt;br /&gt;
        [&lt;br /&gt;
            _Elem=char,&lt;br /&gt;
            _Traits=std::char_traits&amp;lt;char&amp;gt;,&lt;br /&gt;
            _Ax=std::allocator&amp;lt;char&amp;gt;&lt;br /&gt;
        ]&lt;br /&gt;
        c:\program files\microsoft visual studio 8\vc\include\queue(103) : see declaration of 'std::operator &amp;lt;'&lt;br /&gt;
        c:\program files\microsoft visual studio 8\vc\include\functional(142) : while compiling class template member function 'bool std::less&amp;lt;_Ty&amp;gt;::operator ()(const _Ty &amp;amp;,const _Ty &amp;amp;) const'&lt;br /&gt;
        with&lt;br /&gt;
        [&lt;br /&gt;
            _Ty=std::basic_string&amp;lt;char,std::char_traits&amp;lt;char&amp;gt;,std::allocator&amp;lt;char&amp;gt;&amp;gt;&lt;br /&gt;
        ]&lt;br /&gt;
        c:\program files\microsoft visual studio 8\vc\include\queue(219) : see reference to class template instantiation 'std::less&amp;lt;_Ty&amp;gt;' being compiled&lt;br /&gt;
        with&lt;br /&gt;
        [&lt;br /&gt;
            _Ty=std::basic_string&amp;lt;char,std::char_traits&amp;lt;char&amp;gt;,std::allocator&amp;lt;char&amp;gt;&amp;gt;&lt;br /&gt;
        ]&lt;br /&gt;
        d:\projects\study\cpp\straus\containers2\containers2.cpp(116) : see reference to class template instantiation 'std::priority_queue&amp;lt;_Ty,_Container&amp;gt;' being compiled&lt;br /&gt;
        with&lt;br /&gt;
        [&lt;br /&gt;
            _Ty=std::string,&lt;br /&gt;
            _Container=std::deque&amp;lt;std::string&amp;gt;&lt;br /&gt;
        ]&lt;/p&gt;&lt;/blockquote&gt;
При чем тут queue, это ж вроде priority_queue...&lt;br /&gt;
И еще 32 ошибки, вроде то же самое про stack, deque, vector, xtree...&lt;br /&gt;
&lt;br /&gt;
Из них я понял только то, что что-то не в порядке с oparator()&amp;lt; для string. priority_queue его дергает, чтоб строку в нужное место вставить.&lt;br /&gt;
Закомментировал приведенный код, ошибки исчезли.&lt;br /&gt;
Добавил тупо сравнение через вышеуказанный оператор:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;void&lt;/span&gt; testtest(){
    std::string str1(&lt;span class='str'&gt;"aaaa"&lt;/span&gt;);
    std::string str2(&lt;span class='str'&gt;"bbbb"&lt;/span&gt;);
    &lt;span class='kw'&gt;bool&lt;/span&gt; b = (str1 &amp;lt; str2);
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Получил те же самые ошибки. Ну, не те же, тоже 33 штуки, только вида&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;error C2784: 'bool std::operator &amp;lt;(const std::queue&amp;lt;_Ty,_Container&amp;gt; &amp;amp;,const std::queue&amp;lt;_Ty,_Container&amp;gt; &amp;amp;)' : could not deduce template argument for 'const std::queue&amp;lt;_Ty,_Container&amp;gt; &amp;amp;' from 'std::string'&lt;br /&gt;
        c:\program files\microsoft visual studio 8\vc\include\queue(103) : see declaration of 'std::operator &amp;lt;'&lt;/p&gt;&lt;/blockquote&gt;
Перенес void testtest() в другой cpp-файл &amp;mdash; все скомпилировалось.&lt;br /&gt;
&lt;br /&gt;
Да, те контейнеры в output фигурируют видимо потому, что все они подключены в начале cpp-файла:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;map&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;vector&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;list&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;stack&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;queue&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;deque&amp;gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;algorithm&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
(Просто делаю примеры из Страуса, по очереди, ну и подключаю)&lt;br /&gt;
&lt;br /&gt;
Есть идеи?&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/Y2Ad7UuzFBs" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Fri, 05 Feb 2010 18:40:29 GMT</pubDate>
		
			<author>cpp_beginner &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Что это за приём?</title>
		<link>http://www.rsdn.ru/Forum/cpp/3695245.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3695245.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3695245.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3695245</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3695245.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3695245</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Какой смысл у такой записи:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
    &lt;span class='kw'&gt;enum&lt;/span&gt; _Seekdir
        {    &lt;span class='com'&gt;// constants for file positioning options&lt;/span&gt;
        _Seekmask = 0x3};
    &lt;span class='kw'&gt;static const&lt;/span&gt; _Seekdir beg = (_Seekdir)0;
    &lt;span class='kw'&gt;static const&lt;/span&gt; _Seekdir cur = (_Seekdir)1;
    &lt;span class='kw'&gt;static const&lt;/span&gt; _Seekdir end = (_Seekdir)2;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/Ukd_B7GQfCw" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Fri, 05 Feb 2010 14:12:26 GMT</pubDate>
		
			<author>nen777w &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>9</slash:comments>
		
	</item>

	<item>
		<title>CppEvents</title>
		<link>http://www.rsdn.ru/Forum/cpp/3695015.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3695015.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3695015.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3695015</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3695015.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3695015</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;CppEvents &amp;mdash; моя open-source либа, которая на днях была доведена до релиза, в связи с чем выносится на обсуждение. Либа предоставляет реализацию механизма событий/делегатов (сигналов/слотов) для C++. При разработке я ориентировался на аналогичные механизмы в C# и Qt, библиотеки Boost.Signals, LibSigC++ и SigSlot, и считаю что полученное решение превосходит остальные реализации.&lt;br /&gt;
&lt;br /&gt;
Как и указанные библиотеки, моя основывается на шаблонах, но при этом точка зрения, с которой рассматривались события значительно отличается от других шаблонных реализаций, и лежит ближе к реализациям в C# и Qt. Я рассматривал событие не как самостоятельный объект, а в первую очередь как член класса, как средство представления в интерфейсе класса обратных сообщений, по аналогии с тем как функции-члены представляют прямые. Обработчиками событий также являются не объекты, а отдельные методы объектов (делегаты).&lt;br /&gt;
&lt;br /&gt;
Как и в C#, события могут быть виртуальными и чисто виртуальными, могут использоваться в интерфейсах (мне этого ощутимо не хватало при работе с Qt).&lt;br /&gt;
&lt;br /&gt;
Как и другие виды членов класса, события могут иметь уровень доступа. Но, в отличии от, скажем, функций-членов, события имеют два интерфейса &amp;mdash; один для подключения обработчиков, другой для активации события. Моя реализация дает полный контроль над уровнями доступа. В C# &amp;mdash; уровень доступа для интерфейса подключения задается явно, для интерфейса активации &amp;mdash; всегда private, в Qt &amp;mdash; всегда public/protected, в других шаблонных реализациях уровень доступа для интерфейсов не разделяется, что является грубым нарушением инкапсуляции. Таким образом, событие как сущность состоит из двух элементов &amp;mdash; переменной-члена класса Cpp::Event&amp;lt;&amp;gt;, которая предоставляет интерфейс активации, и функции, которая возвращает временный объект класса Cpp::EventRef&amp;lt;&amp;gt;, который реализует интерфейс управления соединениями.&lt;br /&gt;
&lt;br /&gt;
Я сознательно отказался от управления возвращаемыми значениями и выброшенными исключениями как от "идеологически вредных" фич &amp;mdash; объект посылающий обратное сообщение по определению не должен ничего знать о количестве и характере его обработчиков, а потому обработать возвращенные значения и выброшенные исключения никак не может.&lt;br /&gt;
&lt;br /&gt;
В минимальном объеме поддерживается параметризация делегатов &amp;mdash; при соединении можно указать несколько значений, которые будут переданы в делегат как начальные аргументы. Как и в Qt последние аргументы события, которые "не влазят" в сигнатуру делегата, молча игнорируются. Также работает автоматическое преобразование типа аргументов события в типы аргументов делегата. Я не пытался реализовать возможности сравнимые с boost::bind, но постарался сделать синтаксис максимально удобочитабельным и лаконичным.&lt;br /&gt;
&lt;br /&gt;
Реализовано автоматическое разъединение. В отличии от Boost.Signals и LibSigC++ оно работает всегда &amp;mdash; написать код, который работает не так, как вы того ожидаете, намного сложнее. Автоматическое разъединение реализовано не в базовом классе, а во внешнем объекте &amp;mdash; это дает большую гибкость в управлении соединениями и решает проблему запоздалого разъединения &amp;mdash; если событие будет сгенерировано в процессе работы деструкторов промежуточных классов, то может быть вызван метод объекта, который уже не существует.&lt;br /&gt;
&lt;br /&gt;
Библиотека является полностью потокобезопасной. Для обеспечения потокобезопасности используются атомарные счетчики и мьютексы. Для экономии ресурсов мьютексы создаются по одному на поток и разделяются между всеми объектами созданными в этом потоке (также сделано и в Qt). Указатель на мьютекс хранится в TLS. Абстракции синхронизационных примитивов реализованы для WinAPI и POSIX Threads + GCC intrinsics.&lt;br /&gt;
&lt;br /&gt;
Мне удалось добиться очень эффективной реализации &amp;mdash; по результатам замеров быстродействия мое детище работает в 6-8 раз быстрее Boost.Signals и в 1,5-2 раза быстрее Qt, так что реализацией внутренностей я весьма доволен, но вот над юзабилити еще собираюсь поработать &amp;mdash; в частности, внешний connection scope сильно напрягает меня самого.&lt;br /&gt;
&lt;br /&gt;
Библиотека хостится на гугл-коде &amp;mdash; &lt;a href="http://code.google.com/p/cpp-events" class="m" target="_blank"&gt;http://code.google.com/p/cpp-events&lt;/a&gt;. Дополнительную информацию, в частности tutorial с полу-реальными примерами, можно найти в wiki на сайте.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/Xy8nw_hivU0" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Fri, 05 Feb 2010 11:16:50 GMT</pubDate>
		
			<author>kjam &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>9</slash:comments>
		
	</item>

	<item>
		<title>RTTI: Incomparable/Superclass/Subclass/Same</title>
		<link>http://www.rsdn.ru/Forum/cpp/3694437.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3694437.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3694437.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3694437</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3694437.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3694437</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Помогите написать функцию, которая для существующей иерархии классов определяла бы, что две объекта наследников имеют одинаковый тип, не сравними, являются предком или наследником.&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; Object
{
&lt;span class='kw'&gt;public&lt;/span&gt;:
  &lt;span class='kw'&gt;virtual&lt;/span&gt; ~Object(){};
};

&lt;span class='kw'&gt;enum&lt;/span&gt; Result
{
  Incomparable,
  Superclass,
  Subclass,
  Same
};

Result Compare(&lt;span class='kw'&gt;const&lt;/span&gt; Object&amp;amp; obj1, &lt;span class='kw'&gt;const&lt;/span&gt; Object&amp;amp; obj2)
{
  &lt;span class='kw'&gt;if&lt;/span&gt;(&lt;span class='kw'&gt;typeid&lt;/span&gt;(obj1) == &lt;span class='kw'&gt;typeid&lt;/span&gt;(obj2))
    &lt;span class='kw'&gt;return&lt;/span&gt; Same;
  ??? Что писать дальше?
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Классы унаследованыые от Object изменять нельзя. В будущем возможно появятся новые классы унаследованные от Object. То есть желательно, чтобы функцию Compare было легко расширять.&lt;br /&gt;
&lt;br /&gt;
Например, для классов&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; A : &lt;span class='kw'&gt;public&lt;/span&gt; Object
{};
&lt;span class='kw'&gt;class&lt;/span&gt; B : &lt;span class='kw'&gt;public&lt;/span&gt; Object
{};
&lt;span class='kw'&gt;class&lt;/span&gt; AA : &lt;span class='kw'&gt;public&lt;/span&gt; A
{};&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
имеем&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
AA aa;
A a;
B b;
ASSERT( Subclass == Compare(aa, a);
ASSERT( Same == Compare(a, a);
ASSERT( Superclass == Compare(a, aa);
ASSERT( Incomparable == Compare(b, a);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/6zB40CZgNMg" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Thu, 04 Feb 2010 20:35:50 GMT</pubDate>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>совет</title>
		<link>http://www.rsdn.ru/Forum/cpp/3694316.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3694316.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3694316.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3694316</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3694316.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3694316</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;здравствуйте,&lt;br /&gt;
&lt;br /&gt;
посоветуйте книгу по си, с помощью которой можно научиться применять полученные знания.&lt;br /&gt;
я имею ввиду, книгу, в которой на примерах будет показано где, например, и как применять указатели на функции, функц. возвращающие указатели,&lt;br /&gt;
перегрузки разные и т.д.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/NU0bk_OnldQ" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Thu, 04 Feb 2010 19:08:35 GMT</pubDate>
		
			<author>i.dmitry &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>1</slash:comments>
		
	</item>

	<item>
		<title>Function overloading in C</title>
		<link>http://www.rsdn.ru/Forum/cpp/3693416.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3693416.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3693416.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3693416</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3693416.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3693416</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;"Добрые" ребята из ISO C комитета решили использовать в интерфейсе библиотеки атомарных операций для С0х перегрузку функций.&lt;br /&gt;
А именно, имеется ряд функций вида:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
C atomic_load_explicit(A*, memory_order);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
где С и А могут быть:&lt;br /&gt;
short, atomic_short&lt;br /&gt;
unsigned short, atomic_ushort&lt;br /&gt;
int, atomic_int&lt;br /&gt;
unsigned, atomic_uint&lt;br /&gt;
long long, atomic_llong&lt;br /&gt;
unsigned long long, atomic_ullong&lt;br /&gt;
и т.д.&lt;br /&gt;
&lt;br /&gt;
Что это смогут реализовать разработчики компиляторов, тем более будущих, сомнений нет (тем более, что уже есть прецедент перегрузки фукнций в С99 в &amp;lt;tgmath.h&amp;gt;). Я же хочу это реализовать для текущих компиляторов в виде библиотеки.&lt;br /&gt;
Для GCC есть возможность это реализовать с помощью __typeof__:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;#define&lt;/span&gt; atomic_load_explicit(a, mo) ((__typeof__((a)-&amp;gt;v))atomic_load_explicit_size((a), (mo), &lt;span class='kw'&gt;sizeof&lt;/span&gt;(*(a))))

&lt;span class='kw'&gt;inline unsigned long long&lt;/span&gt; atomic_load_explicit_size(a, mo, size)
{
    &lt;span class='kw'&gt;switch&lt;/span&gt; (size)
    {
    &lt;span class='kw'&gt;case&lt;/span&gt; 1: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_1(a, mo);
    &lt;span class='kw'&gt;case&lt;/span&gt; 2: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_2(a, mo);
    &lt;span class='kw'&gt;case&lt;/span&gt; 4: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_4(a, mo);
    &lt;span class='kw'&gt;case&lt;/span&gt; 8: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_8(a, mo);
    }
}

&lt;span class='kw'&gt;inline unsigned long long&lt;/span&gt; atomic_load_explicit_1(a, mo)
{
    &lt;span class='kw'&gt;switch&lt;/span&gt; (mo)
    {
    &lt;span class='kw'&gt;case&lt;/span&gt; memory_order_relaxed: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_1_relaxed(a);
    &lt;span class='kw'&gt;case&lt;/span&gt; memory_order_consume: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_1_consume(a);
    &lt;span class='kw'&gt;case&lt;/span&gt; memory_order_acquire: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_1_acquire(a);
    &lt;span class='kw'&gt;case&lt;/span&gt; memory_order_release: &lt;span class='kw'&gt;return&lt;/span&gt; assert(0), 0;
    &lt;span class='kw'&gt;case&lt;/span&gt; memory_order_acq_rel: &lt;span class='kw'&gt;return&lt;/span&gt; assert(0), 0;
    &lt;span class='kw'&gt;case&lt;/span&gt; memory_order_seq_cst: &lt;span class='kw'&gt;return&lt;/span&gt; atomic_load_explicit_1_seq_cst(a);
    }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Однако я запнулся на том, как это реализовать для MSVC2005/2008 C. Есть какие-нибудь идеи?&lt;br /&gt;
Есть вариант просто убрать каст (__typeof__((a)-&amp;gt;v)), и возвращать для всех вариантов unsigned long long. В целом это будет работать, но ОЧЕНЬ не нравится множество возникающих варнингов "conversion from 'unsigned __int64' to 'Х', possible loss of data".&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;img border='0' width='57' height='16' src='http://www.rsdn.ru/Forum/images/beer.gif' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/7k5M0R1YnG8" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Thu, 04 Feb 2010 11:52:29 GMT</pubDate>
		
			<author>remark &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>8</slash:comments>
		
	</item>

	<item>
		<title>Связь паралельных иерархий</title>
		<link>http://www.rsdn.ru/Forum/cpp/3693210.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3693210.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3693210.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3693210</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3693210.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3693210</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Допустим есть иерархия контролов и отдельная иерархия состояний контролов&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; ControlState
{};

&lt;span class='kw'&gt;class&lt;/span&gt; ButtonState: &lt;span class='kw'&gt;public&lt;/span&gt; ControlState
{};

&lt;span class='kw'&gt;class&lt;/span&gt; Control
{
  State* st;
};

&lt;span class='kw'&gt;class&lt;/span&gt; Button: &lt;span class='kw'&gt;public&lt;/span&gt; Control
{
  &lt;span class='kw'&gt;void&lt;/span&gt; SomeMethod()
  {
        &lt;b&gt;ButtonState* but_state = &lt;span class='kw'&gt;dynamic_cast&lt;/span&gt;&amp;lt;ButtonState*&amp;gt;(st);&lt;span class='com'&gt;//не нравится что постоянно приходится кастить!&lt;/b&gt;
        //...&lt;/span&gt;
  }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Дополнительное условие что все контролы могут хранится в каком-то контейнере, например vector&amp;lt;Control*&amp;gt;, поэтому должны наследоваться от общего класса.&lt;br /&gt;
Пока придумал следующие:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;class&lt;/span&gt; Control
{
&lt;span class='com'&gt;//Тут уже нет State&lt;/span&gt;
};

&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;&lt;span class='kw'&gt;typename&lt;/span&gt; StateType&amp;gt;
&lt;span class='kw'&gt;class&lt;/span&gt; ControlWithState: &lt;span class='kw'&gt;public&lt;/span&gt; Control
{
    StateType st;;
}

&lt;span class='kw'&gt;class&lt;/span&gt; Button: &lt;span class='kw'&gt;public&lt;/span&gt; ControlWithState&amp;lt;ButtonState&amp;gt;
{
&lt;span class='com'&gt;//Тут работаем с состоянием без кастов&lt;/span&gt;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Но в последнем варианте не нравится неинтуитивное наследование от ControlWithState, разроботчик который будет поддерживать код может сильно удивиться что в векторе хранятся Control* а наследуем мы от ControlWithState.&lt;br /&gt;
Кто что посоветует?&lt;br /&gt;
Спасибо.&lt;div class='tagline'&gt;... &amp;lt;&amp;lt; RSDN@Home 1.2.0 alpha 4 rev. 1111&amp;gt;&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/zmh4Ktlni8s" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Thu, 04 Feb 2010 09:42:00 GMT</pubDate>
		
			<author>ankorol &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>8</slash:comments>
		
	</item>

	<item>
		<title>string literal conversion или unique id is returned back</title>
		<link>http://www.rsdn.ru/Forum/cpp/3692890.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3692890.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3692890.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3692890</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3692890.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3692890</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Всем привет.&lt;br /&gt;
&lt;br /&gt;
Есть некий символьный тип, размерность которого отлична от wchar_t и char_t. Хочется уметь присваивать ему строковые литералы, по аналогии с макросом _T или TEXT. Т.е. получить нечто вроде&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
const my_char *p = MY_TEXT("text"); // (1)
const my_char p1[] = MY_TEXT("text"); // (2)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
Воспаленное сознание придумало пока что только следующий ход:&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;typedef wchar_t&lt;/span&gt; my_char;

&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;size_t size, &lt;span class='kw'&gt;unsigned&lt;/span&gt; id&amp;gt;
&lt;span class='kw'&gt;struct&lt;/span&gt; MyLiteralBuffer
{
&lt;span class='kw'&gt;static&lt;/span&gt; my_char Data[size];
};

&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;size_t size, &lt;span class='kw'&gt;unsigned&lt;/span&gt; id&amp;gt;
my_char MyLiteralBuffer&amp;lt;size, id&amp;gt;::Data[size];

&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;size_t size&amp;gt;
&lt;span class='kw'&gt;const&lt;/span&gt; my_char (&amp;amp;MyConvert(&lt;span class='kw'&gt;const char&lt;/span&gt; (&amp;amp;src)[size], my_char (&amp;amp;dst)[size]))[size]
{
&lt;span class='com'&gt;// literal conversion here&lt;/span&gt;
  &lt;span class='kw'&gt;return&lt;/span&gt; dst;
}

&lt;span class='kw'&gt;#define&lt;/span&gt; MY_TEXT(str) MyConvert(str, MyLiteralBuffer&amp;lt;&lt;span class='kw'&gt;sizeof&lt;/span&gt;(str), __COUNTER__&amp;gt;::Data)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
С этим кодом есть как минимум 2 проблемы:&lt;br /&gt;
1. использование макроса __COUNTER__ &amp;mdash; его нет на стареньких gcc, а именно они и есть целевая платформа, да и в целом он не гарантирует уникальности статического буфера.&lt;br /&gt;
2. не работает вариант использования (2).&lt;br /&gt;
&lt;br /&gt;
Соответственно, вопросы.&lt;br /&gt;
1. Есть ли более-менее портабельный в рамках gcc для организации компайл-тайм счетчика?&lt;br /&gt;
2. Есть ли вообще возможность заставить работать вариант (2)?&lt;br /&gt;
3. Может, есть более другие варианты добиться желаемого? Не использовать свои типы не предлагать &lt;img border='0' width='15' height='15' src='http://www.rsdn.ru/Forum/images/smile.gif' /&gt;&lt;br /&gt;
&lt;br /&gt;
Спасибо!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/6XrLimVfWPY" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Wed, 03 Feb 2010 21:31:53 GMT</pubDate>
		
			<author>Andrew S &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>std::set memcpy</title>
		<link>http://www.rsdn.ru/Forum/cpp/3692744.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3692744.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3692744.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3692744</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3692744.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3692744</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;можно ли как-нибудь все-таки засунуть std::set в memcpy ? да, я понимаю, но вот пример&lt;br /&gt;
&lt;br /&gt;
есть функция, которой сто лет в обед &lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;void&lt;/span&gt; App::swap(Base * this_b, Base * that_b)
{
&lt;span class='kw'&gt;unsigned int&lt;/span&gt; size = thisent-&amp;gt;size();
...
memcpy( (&lt;span class='kw'&gt;char&lt;/span&gt; *)thisent, (&lt;span class='kw'&gt;char&lt;/span&gt; *)thatent, size); &lt;span class='com'&gt;/// больное место&lt;/span&gt;
...
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
класс Base &amp;mdash; это корешок развесистого дерева и через сто лет обнаружили что в одном из Derived есть std::set.&lt;br /&gt;
после App::swap этот std::set рассыпается.&lt;br /&gt;
&lt;br /&gt;
вопрос:&lt;br /&gt;
как наименьшими затратами обойти проблему ?&lt;br /&gt;
&lt;br /&gt;
1. добавить всем Derived приличный swap &amp;mdash; очень затратно&lt;br /&gt;
2. сделать темплейт из App:swap  и написать спец версию для Derived &amp;mdash; а вдруг потом кто-то напишет еще Derived с set ? можно это избежать ?&lt;br /&gt;
3. заменить set на что-то почти такое же, но безопасное для memcpy ? vector + std::unique&lt;br /&gt;
&lt;br /&gt;
спасибо!&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/Lm5hB3gr5KA" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Wed, 03 Feb 2010 18:57:55 GMT</pubDate>
		
		
			<slash:comments>4</slash:comments>
		
	</item>

	<item>
		<title>shared_ptr</title>
		<link>http://www.rsdn.ru/Forum/cpp/3692033.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3692033.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3692033.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3692033</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3692033.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3692033</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;В описании shared_ptr приведен пример использования.&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;&lt;span class='kw'&gt;class&lt;/span&gt; T&amp;gt; &lt;span class='kw'&gt;class&lt;/span&gt; pointer
{
    T * p_;
&lt;span class='kw'&gt;public&lt;/span&gt;:
    &lt;span class='kw'&gt;explicit&lt;/span&gt; pointer(T * p): p_(p)
    {
    }

    boost::shared_ptr&amp;lt;T&amp;gt; &lt;span class='kw'&gt;operator&lt;/span&gt;-&amp;gt;() &lt;span class='kw'&gt;const&lt;/span&gt;
    {
        p_-&amp;gt;prefix();
        &lt;span class='kw'&gt;return&lt;/span&gt; boost::shared_ptr&amp;lt;T&amp;gt;(p_, std::tr1::mem_fn(&amp;amp;T::suffix));
    }
};

&lt;span class='kw'&gt;class&lt;/span&gt; X
{
&lt;span class='kw'&gt;private&lt;/span&gt;:
    &lt;span class='kw'&gt;void&lt;/span&gt; prefix() {}
    &lt;span class='kw'&gt;void&lt;/span&gt; suffix() {}
    &lt;span class='kw'&gt;friend class&lt;/span&gt; pointer&amp;lt;X&amp;gt;;  
&lt;span class='kw'&gt;public&lt;/span&gt;:
    &lt;span class='kw'&gt;void&lt;/span&gt; f() {}
    &lt;span class='kw'&gt;void&lt;/span&gt; g() {}
};

&lt;span class='kw'&gt;int&lt;/span&gt; _tmain(&lt;span class='kw'&gt;int&lt;/span&gt; argc, _TCHAR* argv[])
{
    X x;
    pointer&amp;lt;X&amp;gt; px(&amp;amp;x);

    px-&amp;gt;f(); &lt;span class='com'&gt;//***&lt;/span&gt;
    px-&amp;gt;g();

    &lt;span class='kw'&gt;return&lt;/span&gt; 0;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос вызывает вызов, отмеченный ***, для которого MSVC2008 сделал код&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
    px-&amp;gt;f();
004115D9  lea         eax,[ebp-100h] 
004115DF  push        eax  
004115E0  lea         ecx,[ebp-20h] 
004115E3  call        pointer&amp;lt;X&amp;gt;::operator-&amp;gt; (411050h) 
004115E8  mov         dword ptr [ebp-108h],eax 
004115EE  mov         ecx,dword ptr [ebp-108h] 
004115F4  mov         dword ptr [ebp-10Ch],ecx 
004115FA  mov         dword ptr [ebp-4],0 
00411601  mov         ecx,dword ptr [ebp-10Ch] 
00411607  call        boost::shared_ptr&amp;lt;X&amp;gt;::operator-&amp;gt; (411203h) //???????
0041160C  mov         ecx,eax 
0041160E  call        X::f (411032h) 
00411613  mov         dword ptr [ebp-4],0FFFFFFFFh 
0041161A  lea         ecx,[ebp-100h] 
00411620  call        boost::shared_ptr&amp;lt;X&amp;gt;::~shared_ptr&amp;lt;X&amp;gt; (411249h)&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Собственно я не пойму откуда взялось второе разыменование, которое помечено "???????". Первое разыменование мы вызвали сами как часть выражения "px-&amp;gt;" (и оно вернуло нам тип boost::shared_ptr&amp;lt;X&amp;gt;), а вот откуда второе? Его-то кто звал? &lt;img border='0' width='37' height='15' src='http://www.rsdn.ru/Forum/images/xz.gif' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/_zeeQQbNiog" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Wed, 03 Feb 2010 11:58:39 GMT</pubDate>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Вызов конструкторов</title>
		<link>http://www.rsdn.ru/Forum/cpp/3691695.1.aspx</link>
		<guid isPermaLink="true">http://www.rsdn.ru/Forum/cpp/3691695.aspx</guid>
		<comments>http://www.rsdn.ru/Forum/cpp/3691695.aspx</comments>
		<wfw:comment>http://www.rsdn.ru/Forum/PostRssComment.aspx?mid=3691695</wfw:comment>
		<wfw:commentRss>http://www.rsdn.ru/Forum/RSS/3691695.aspx</wfw:commentRss>
		<trackback:ping>http://www.rsdn.ru/Forum/Trackback.aspx?mid=3691695</trackback:ping>
		<description>&lt;div style="@import url(http://www.rsdn.ru/Forum/Forum.css);"&gt;Всем привет.&lt;br /&gt;
Возник вопрос по поводу поведения компилятора VS2008, помогите, пожалуйста, разобраться. Есть код:&lt;br /&gt;
&lt;table width='96%'&gt;&lt;tr&gt;&lt;td nowrap='nowrap' class='c'&gt;&lt;pre&gt;
&lt;span class='kw'&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;

&lt;span class='kw'&gt;template&lt;/span&gt;&amp;lt;&lt;span class='kw'&gt;class&lt;/span&gt; T&amp;gt;
&lt;span class='kw'&gt;struct&lt;/span&gt; A
{
    A() { std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"A()"&lt;/span&gt; &amp;lt;&amp;lt; std::endl; }
    A(A &lt;span class='kw'&gt;const&lt;/span&gt;&amp;amp; a) { std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"A(A const&amp;amp;)"&lt;/span&gt; &amp;lt;&amp;lt; std::endl; }
    A(T x) { std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"A(T)"&lt;/span&gt; &amp;lt;&amp;lt; std::endl; }
    &lt;span class='kw'&gt;void&lt;/span&gt; fff() {}    
};

&lt;span class='kw'&gt;int&lt;/span&gt; main()
{    
    &lt;span class='kw'&gt;typedef&lt;/span&gt; A&amp;lt;&lt;span class='kw'&gt;int&lt;/span&gt;&amp;gt; my_a;
    &lt;span class='kw'&gt;int&lt;/span&gt; x = 1;
    
    {
        &amp;amp;my_a(x);
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }    

    {    
        my_a(x);
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    {    
        my_a(x).fff();
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    {
        &amp;amp;my_a(x);
        my_a(x);
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    {    
        my_a(x);
        my_a(x).fff();
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    {
        &amp;amp;my_a(x);
        my_a(x).fff();
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    {
        &amp;amp;my_a(x);
        my_a(x);
        my_a(x).fff();
        std::cout &amp;lt;&amp;lt; &lt;span class='str'&gt;"-----"&lt;/span&gt; &amp;lt;&amp;lt; std::endl;
    }

    &lt;span class='kw'&gt;char&lt;/span&gt; c;
    std::cin &amp;gt;&amp;gt; c;
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Конструируется-разрушается N объектов типа A&amp;lt;int&amp;gt;. Конструируются всегда одинаково &amp;mdash; через A&amp;lt;int&amp;gt;::A(int). Наивно предполагаем, что при запуске программа выведет N раз строчку "A(T)". Фактически же получается так:&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;A(T) &amp;mdash; понятно // 1&lt;br /&gt;
-----&lt;br /&gt;
A() &amp;mdash; не понятно // 2&lt;br /&gt;
-----&lt;br /&gt;
A(T) &amp;mdash; понятно // 3&lt;br /&gt;
-----&lt;br /&gt;
A(T) &amp;mdash; понятно // 4&lt;br /&gt;
A() &amp;mdash; не понятно&lt;br /&gt;
-----&lt;br /&gt;
A() &amp;mdash; не понятно // 5&lt;br /&gt;
A(A const&amp;amp;) &amp;mdash; вообще не понятно&lt;br /&gt;
-----&lt;br /&gt;
A(T) &amp;mdash; понятно // 6&lt;br /&gt;
A(T) &amp;mdash; понятно&lt;br /&gt;
-----&lt;br /&gt;
A(T) &amp;mdash; понятно // 7&lt;br /&gt;
A() &amp;mdash; не понятно&lt;br /&gt;
A(A const&amp;amp;) &amp;mdash; вообще не понятно&lt;br /&gt;
-----&lt;/p&gt;&lt;/blockquote&gt;
Подскажите почему так происходит. Особенно убивает 5-ая группа (то же самое и в 7-ой): ожидается то же самое, что и в 2 + 3 (1 + 2 + 3 в 7-ой).&lt;br /&gt;
&lt;br /&gt;
Спасибо.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/rsdn/cpp/~4/X_FZl5M7FsE" height="1" width="1"/&gt;</description>
		
		<category>cpp</category>
		<pubDate>Wed, 03 Feb 2010 07:48:08 GMT</pubDate>
		
			<author>andyag &lt;forum@rsdn.ru&gt;</author>
		
		
			<slash:comments>13</slash:comments>
		
	</item>
</channel>
</rss>
