unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
@ 2020-12-29  1:10 Duncan Greatwood
  2020-12-30 10:36 ` Michael Albinus
                   ` (11 more replies)
  0 siblings, 12 replies; 30+ messages in thread
From: Duncan Greatwood @ 2020-12-29  1:10 UTC (permalink / raw)
  To: 45518

[-- Attachment #1: Type: text/plain, Size: 5554 bytes --]

Using tramp, I had a remote cpp file open in a window.

I pressed "C-c c", which invokes a function in my .emacs called
compile-hereish, which (in this case) invokes the compile command with
the remote directory containing the remote cpp.

Compilation begins as expected.

The cpp file contains a number of syntax errors. There is what I understand
to be a longstanding Tramp bug such that, if a lot of outputs (syntax
errors) are sent at high speed to the compile window, Tramp hangs.

In emacs 26.2, Ctrl-G (usually ctrl-g three times) would interrupt the hung
Tramp window, and indeed cause the errors to be displayed in the window as
best as Tramp is able.

In emacs 27.1, Ctrl-G does nothing in this "tramp-hung-while-compiling"
situation. I also tried ctrl-c ctrl-c, but that also does nothing. It
appears that the only way to kill the hung Tramp compile is to force-quit
emacs as a whole at the OS level.

Machine running emacs: MacBook Pro (2015), macos Big Sur v11.1. I am using
emacs 27.1 installed via brew-cask on macos.
On the Macbook: ssh -V
    OpenSSH_8.1p1, LibreSSL 2.7.3

Remote host for compile: Ubuntu Linux 20.04.1 LTS (GNU/Linux
5.4.0-54-generic x86_64)
On remote host: ssh -V
  OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f  31 Mar 2020
Also on remote host: gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

If I revert back to emacs 26.2 on the Macbook, ctrl-G once again works as
expected in the event of a Tramp hang.

I am attaching to the remote host using Tramp-ssh mode, but I also tried
Tramp-scp and saw the same behaviour. My .emacs includes:
(setq tramp-default-method "ssh")
(setq tramp-chunksize 500)

The following cpp file (on Ubuntu machine) is sufficient to generate a
large number of syntax errors and hang Tramp, blocking ctrl-G (crashing
emacs) in emacs 27.1 for me.
// test.cpp
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
  DummyClass(
int validstuff();
int validstuff()
{
    return(0);
}
// end test.cpp

Thanks as always.
D.

Following was generated via: M-x report-emacs-bug

In GNU Emacs 27.1 (build 1, x86_64-apple-darwin18.7.0, NS appkit-1671.60
Version 10.14.6 (Build 18G95))
 of 2020-08-11 built on builder10-14.porkrind.org
Windowing system distributor 'Apple', version 10.3.2022
System Description:  macOS 11.1

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
Package cl is deprecated
Mark set

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules'

Configured features:
NOTIFY KQUEUE ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES
THREADS JSON PDUMPER

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  global-undo-tree-mode: t
  undo-tree-mode: t
  global-auto-complete-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/Users/dgreatwood/.emacs.d/lisp/linum hides
/Applications/Emacs.app/Contents/Resources/lisp/linum

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg
epg-config gnus-util rmail rmail-loaddefs text-property-search seq
byte-opt bytecomp byte-compile cconv mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils linum easy-mmode
time-date subr-x server persistent-todo special-scratch tango-theme
advice undo-tree diff auto-complete-config auto-complete popup
string-inflection paren desktop frameset unbound cl-macs cl gv delsel
edmacro kmacro cl-loaddefs cl-lib tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads kqueue cocoa ns
multi-tty make-network-process emacs)

Memory information:
((conses 16 70462 8546)
 (symbols 48 8556 1)
 (strings 32 22334 1877)
 (string-bytes 1 713421)
 (vectors 16 12259)
 (vector-slots 8 156248 17226)
 (floats 8 39 36)
 (intervals 56 248 0)
 (buffers 1000 14))

[-- Attachment #2: Type: text/html, Size: 6793 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
@ 2020-12-30 10:36 ` Michael Albinus
  2020-12-30 21:13 ` Duncan Greatwood
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2020-12-30 10:36 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

Hi Duncan,

> In emacs 26.2, Ctrl-G (usually ctrl-g three times) would interrupt the
> hung Tramp window, and indeed cause the errors to be displayed in the
> window as best as Tramp is able.
>
> In emacs 27.1, Ctrl-G does nothing in this
> "tramp-hung-while-compiling" situation. I also tried ctrl-c ctrl-c,
> but that also does nothing. It appears that the only way to kill the
> hung Tramp compile is to force-quit emacs as a whole at the OS level.

Well, in this area several changes have been applied since Emacs 27.1
has been released. Could you, pls, try the Tramp ELPA version (2.5.0)?
Even if it still blocks Emacs, there is a new option to write Tramp
traces to file. This would help us to find the culprit, if still
evident.

> Thanks as always.
> D.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
  2020-12-30 10:36 ` Michael Albinus
@ 2020-12-30 21:13 ` Duncan Greatwood
  2020-12-31  8:42   ` Michael Albinus
  2021-01-03 19:27 ` Duncan Greatwood
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2020-12-30 21:13 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 2478 bytes --]

Hi Michael,

On Wed, Dec 30, 2020 at 2:36 AM Michael Albinus <michael.albinus@gmx.de>
> wrote:
> Duncan Greatwood <dgbulk@gmail.com> writes:
> Hi Duncan,
> > In emacs 26.2, Ctrl-G (usually ctrl-g three times) would interrupt the
> > hung Tramp window, and indeed cause the errors to be displayed in the
> > window as best as Tramp is able.
> >
> > In emacs 27.1, Ctrl-G does nothing in this
> > "tramp-hung-while-compiling" situation. I also tried ctrl-c ctrl-c,
> > but that also does nothing. It appears that the only way to kill the
> > hung Tramp compile is to force-quit emacs as a whole at the OS level.
> Well, in this area several changes have been applied since Emacs 27.1
> has been released. Could you, pls, try the Tramp ELPA version (2.5.0)?
>
[DG] I note in passing that in my emacs 27.1 build, I already have Tramp
2.5.0 installed as per:
    M-x list-packages
    ...
      tramp              2.5.0         available

Nonetheless, I downloaded from this page:
https://elpa.gnu.org/packages/tramp.html
    tramp-2.5.0.tar, 2020-Dec-29, 1.61 MiB
I expanded the tar to a local directory, call it ~/.../tramp-2.5.0

I then added the following to my .emacs file:
    (add-to-list 'load-path (expand-file-name "~/.../tramp-2.5.0"))
    (require 'tramp)

Happy news - with this addition to .emacs, pressing ctrl-g three times once
again interrupts the hung Tramp window, and .emacs as a whole does not
crash.

I tried adding and removing the .emacs lines several times, and the matter
produces perfectly: ctrl-gx3 always works when the .emacs lines are
present, and never works when they are not in emacs 27.1.

The only slight wrinkle I noticed with this newest version of tramp (vs.
emacs 26.2 tramp) is that, after pressing ctrl-gx3, it feels I have to
click around to another window and back in order to see the error output
from the compile appear in the tramp compile window, wheres in emacs 26.2
the error output would start appearing in the tramp compile window as soon
as ctrl-gx3 was pressed. No terrible hardship but JFYI.

Is there anything I can do that would help diagnose / pinpoint or whatever?
Either with the ctrl-gx3 matter, or indeed with the underlying hang in the
tramp compile window which requires the use of ctrl-gx3.

Best regards,
Duncan


> Even if it still blocks Emacs, there is a new option to write Tramp
> traces to file. This would help us to find the culprit, if still
> evident.
> > Thanks as always.
> > D.
> Best regards, Michael.

[-- Attachment #2: Type: text/html, Size: 3298 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-30 21:13 ` Duncan Greatwood
@ 2020-12-31  8:42   ` Michael Albinus
  2021-01-03 10:27     ` Michael Albinus
  0 siblings, 1 reply; 30+ messages in thread
From: Michael Albinus @ 2020-12-31  8:42 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Hi Michael,

Hi Duncan,

> [DG] I note in passing that in my emacs 27.1 build, I already have
> Tramp 2.5.0 installed as per:
>     M-x list-packages
>     ...
>       tramp              2.5.0         available

Well, this doe NOT mean it is installed already. It is available in the
package archive.

> Nonetheless, I downloaded from this page:
> https://elpa.gnu.org/packages/tramp.html
>     tramp-2.5.0.tar, 2020-Dec-29, 1.61 MiB
> I expanded the tar to a local directory, call it ~/.../tramp-2.5.0
>
> I then added the following to my .emacs file:
>     (add-to-list 'load-path (expand-file-name "~/.../tramp-2.5.0"))
>     (require 'tramp)

That's one way to do it. The more natural way is "M-x package-install
RET tramp". Or, in the *Packages* buffer, mark the package with "i", and
install it via "x".

> Happy news - with this addition to .emacs, pressing ctrl-g three times
> once again interrupts the hung Tramp window, and .emacs as a whole
> does not crash.
>
> I tried adding and removing the .emacs lines several times, and the
> matter produces perfectly: ctrl-gx3 always works when the .emacs lines
> are present, and never works when they are not in emacs 27.1.

Great!

> The only slight wrinkle I noticed with this newest version of tramp
> (vs. emacs 26.2 tramp) is that, after pressing ctrl-gx3, it feels I
> have to click around to another window and back in order to see the
> error output from the compile appear in the tramp compile window,
> wheres in emacs 26.2 the error output would start appearing in the
> tramp compile window as soon as ctrl-gx3 was pressed. No terrible
> hardship but JFYI.
>
> Is there anything I can do that would help diagnose / pinpoint or
> whatever? Either with the ctrl-gx3 matter, or indeed with the
> underlying hang in the tramp compile window which requires the use of
> ctrl-gx3.

I will try to reproduce it locally. Since I don't know where to start
with debugging, I cant give you instructions for this yet.

> Best regards,
> Duncan

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-31  8:42   ` Michael Albinus
@ 2021-01-03 10:27     ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-03 10:27 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Michael Albinus <michael.albinus@gmx.de> writes:

Hi Duncan,

>> Is there anything I can do that would help diagnose / pinpoint or
>> whatever? Either with the ctrl-gx3 matter, or indeed with the
>> underlying hang in the tramp compile window which requires the use of
>> ctrl-gx3.
>
> I will try to reproduce it locally. Since I don't know where to start
> with debugging, I cant give you instructions for this yet.

I've tried to trigger this error, but I cannot. Calling "M-x compile",
and invoking "gcc test.cpp" then, returns immediately with one error
message:

--8<---------------cut here---------------start------------->8---
-*- mode: compilation; default-directory: "/ssh:detlef:/home/albinus/tmp/" -*-
Compilation started at Sun Jan  3 11:23:16

gcc test.cpp
test.cpp:2:13: error: expected constructor, destructor, or type conversion before ‘(’ token
    2 |   DummyClass(
      |             ^

Compilation exited abnormally with code 1 at Sun Jan  3 11:23:16
--8<---------------cut here---------------end--------------->8---

What does it need to hang Emacs/Tramp, compiling this file?

>> Best regards,
>> Duncan

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
  2020-12-30 10:36 ` Michael Albinus
  2020-12-30 21:13 ` Duncan Greatwood
@ 2021-01-03 19:27 ` Duncan Greatwood
  2021-01-06 13:37   ` Michael Albinus
  2021-01-06 22:54 ` Duncan Greatwood
                   ` (8 subsequent siblings)
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-01-03 19:27 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 5698 bytes --]

Firstly, my apologies. The test.cpp I supplied was an attempt at a quick
simplification, and as you said it doesn't produce "enough" syntax errors
actually.

I am pasting below a test.cpp that I have verified on my setup does hang
the tramp window.

I'm afraid that there is another complication for reproducability. I cannot
get the issue to reproduce when I do "M-x compile" then invoking "gcc
test.cpp". It appears to reproduce only when doing "make" on a larger /
more complex project containing test.cpp. This is true even when test.cpp
is the first file that compiles in the project upon "make".

I attempted to make a small autotools project containing test.cpp, but even
that doesn't seem to reproduce the tramp hang. Only by including test.cpp
in a large preexisting project does the hang occur, at least for me.

I would suggest that you take a favorite large C++ autotools project, add
test.cpp to the source tree and Makefile.am, and see if the hang reproduces
for you.

For your reference, I am also pasting the output from the hung tramp window
when I added test.cpp to a library within one of my own larger projects.

Regards,
D.
======= Hung Tramp Window ==========

-*- mode: compilation; default-directory:
"/ssh:username@TWR1HM:/home/username/Dropbox/progs/thisprog/sbshared/src/"
-*-
Compilation started at Sun Jan  3 11:02:36

make -k
make  all-am
make[1]: Entering directory
'/home/username/Dropbox/progs/thisprog/sbshared/src'
/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I.
 -std=c++11 -Wall -Werror -Wclobbered -Wempty-body -Wignored-qualifiers
-Wmissing-field-initializers -Wsign-compare -Wtype-limits -Wuninitialized
-Winit-self -Wcast-align -Wfloat-equal -Wformat=2 -Wno-psabi
 -I/usr/include/libxml2 -I../../../kilo  -I../../../rapidxml  -g3 -Og
-DDEBUG=1 -MT test.lo -MD -MP -MF .deps/test.Tpo -c -o test.lo test.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -std=c++11 -Wall -Werror
-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wsign-compare -Wtype-limits -Wuninitialized -Winit-self -Wcast-align
-Wfloat-equal -Wformat=2 -Wno-psabi -I/usr/include/libxml2 -I../../../kilo
-I../../../rapidxml -g3 -Og -DDEBUG=1 -MT test.lo -MD -MP -MF
.deps/test.Tpo -c test.cpp  -fPIC -DPIC -o .libs/test.o

==================================
// test.cpp - for lots of syntax errors

#include <mutex>
#include <string>
#include <vector>
#include <memory>

class A1
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
    A1 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A1> a1ptr;
    A2() {A1 a1; a1ptr = &a1;}
};

#define AN_BODY                                                    \
    A1 x1;                                                         \
    A1 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A1::f1()
{
    AN_BODY;
}

int A1::f2()
{
    AN_BODY;
}

int A1::f3()
{
    AN_BODY;
}

int A1::f4()
{
    AN_BODY;
}

int A1::f5()
{
    AN_BODY;
}

int A1::f6()
{
    AN_BODY;
}

int A1::f7()
{
    AN_BODY;
}

int A1::f8()
{
    AN_BODY;
}

int A1::f9()
{
    AN_BODY;
}

int A1::f10()
{
    AN_BODY;
}


int main(int argc, char* argv[])
{
    AN_BODY;
}
// end test.cpp

==================================
On Sun, Jan 3, 2021 at 2:27 AM Michael Albinus <michael.albinus@gmx.de>
wrote:

> Michael Albinus <michael.albinus@gmx.de> writes:
>
> Hi Duncan,
>
> >> Is there anything I can do that would help diagnose / pinpoint or
> >> whatever? Either with the ctrl-gx3 matter, or indeed with the
> >> underlying hang in the tramp compile window which requires the use of
> >> ctrl-gx3.
> >
> > I will try to reproduce it locally. Since I don't know where to start
> > with debugging, I cant give you instructions for this yet.
>
> I've tried to trigger this error, but I cannot. Calling "M-x compile",
> and invoking "gcc test.cpp" then, returns immediately with one error
> message:
>
> --8<---------------cut here---------------start------------->8---
> -*- mode: compilation; default-directory: "/ssh:detlef:/home/albinus/tmp/"
> -*-
> Compilation started at Sun Jan  3 11:23:16
>
> gcc test.cpp
> test.cpp:2:13: error: expected constructor, destructor, or type conversion
> before ‘(’ token
>     2 |   DummyClass(
>       |             ^
>
> Compilation exited abnormally with code 1 at Sun Jan  3 11:23:16
> --8<---------------cut here---------------end--------------->8---
>
> What does it need to hang Emacs/Tramp, compiling this file?
>
> >> Best regards,
> >> Duncan
>
> Best regards, Michael.

[-- Attachment #2: Type: text/html, Size: 7615 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-03 19:27 ` Duncan Greatwood
@ 2021-01-06 13:37   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-06 13:37 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 633 bytes --]

Duncan Greatwood <dgbulk@gmail.com> writes:

Hi Duncan,

> I would suggest that you take a favorite large C++ autotools project,
> add test.cpp to the source tree and Makefile.am, and see if the hang
> reproduces for you.

I don't work with C++, so I haven't.

> For your reference, I am also pasting the output from the hung tramp
> window when I added test.cpp to a library within one of my own larger
> projects.

I tried to mimic that, but it still just shows all errors, and no hung
window. Tested with recent Tramp 2.5.0 and all Emacs versions 26, 27,
28. See appended compile output.

> Regards,
> D.

Best regards, Michael.


[-- Attachment #2: *compilation* --]
[-- Type: text/plain, Size: 199137 bytes --]

-*- mode: compilation; default-directory: "/ssh:detlef:/home/albinus/tmp/" -*-
Compilation started at Wed Jan  6 14:06:15

g++ -DHAVE_CONFIG_H -I. -std=c++11 -Wall -Werror -Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers -Wsign-compare -Wtype-limits -Wuninitialized -Winit-self -Wcast-align -Wfloat-equal -Wformat=2 -Wno-psabi -I/usr/include/libxml2 -I../../../kilo -I../../../rapidxml -g3 -Og -DDEBUG=1 -MT test.lo -MD -MP -MF -c test.cpp  -fPIC -DPIC -o .libs/test.o
test.cpp:23:7: error: ‘Nested::Nested’ has the same name as the class in which it is declared
   23 | class Nested
      |       ^~~~~~
test.cpp: In constructor ‘A2::A2()’:
test.cpp:95:27: error: no match for ‘operator=’ (operand types are ‘std::shared_ptr<A1>’ and ‘A1*’)
   95 |     A2() {A1 a1; a1ptr = &a1;}
      |                           ^~
In file included from /usr/include/c++/10/memory:84,
                 from test.cpp:6:
/usr/include/c++/10/bits/shared_ptr.h:358:19: note: candidate: ‘std::shared_ptr<_Tp>& std::shared_ptr<_Tp>::operator=(const std::shared_ptr<_Tp>&) [with _Tp = A1]’
  358 |       shared_ptr& operator=(const shared_ptr&) noexcept = default;
      |                   ^~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:358:29: note:   no known conversion for argument 1 from ‘A1*’ to ‘const std::shared_ptr<A1>&’
  358 |       shared_ptr& operator=(const shared_ptr&) noexcept = default;
      |                             ^~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:362:2: note: candidate: ‘template<class _Yp> std::shared_ptr<_Tp>::_Assignable<const std::shared_ptr<_Yp>&> std::shared_ptr<_Tp>::operator=(const std::shared_ptr<_Yp>&) [with _Yp = _Yp; _Tp = A1]’
  362 |  operator=(const shared_ptr<_Yp>& __r) noexcept
      |  ^~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:362:2: note:   template argument deduction/substitution failed:
test.cpp:95:27: note:   mismatched types ‘const std::shared_ptr<_Tp>’ and ‘A1*’
   95 |     A2() {A1 a1; a1ptr = &a1;}
      |                           ^~
In file included from /usr/include/c++/10/memory:84,
                 from test.cpp:6:
/usr/include/c++/10/bits/shared_ptr.h:373:2: note: candidate: ‘template<class _Yp> std::shared_ptr<_Tp>::_Assignable<std::auto_ptr<_Up> > std::shared_ptr<_Tp>::operator=(std::auto_ptr<_Up>&&) [with _Yp = _Yp; _Tp = A1]’
  373 |  operator=(auto_ptr<_Yp>&& __r)
      |  ^~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:373:2: note:   template argument deduction/substitution failed:
test.cpp:95:27: note:   mismatched types ‘std::auto_ptr<_Up>’ and ‘A1*’
   95 |     A2() {A1 a1; a1ptr = &a1;}
      |                           ^~
In file included from /usr/include/c++/10/memory:84,
                 from test.cpp:6:
/usr/include/c++/10/bits/shared_ptr.h:382:7: note: candidate: ‘std::shared_ptr<_Tp>& std::shared_ptr<_Tp>::operator=(std::shared_ptr<_Tp>&&) [with _Tp = A1]’
  382 |       operator=(shared_ptr&& __r) noexcept
      |       ^~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:382:30: note:   no known conversion for argument 1 from ‘A1*’ to ‘std::shared_ptr<A1>&&’
  382 |       operator=(shared_ptr&& __r) noexcept
      |                 ~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/shared_ptr.h:390:2: note: candidate: ‘template<class _Yp> std::shared_ptr<_Tp>::_Assignable<std::shared_ptr<_Yp> > std::shared_ptr<_Tp>::operator=(std::shared_ptr<_Yp>&&) [with _Yp = _Yp; _Tp = A1]’
  390 |  operator=(shared_ptr<_Yp>&& __r) noexcept
      |  ^~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:390:2: note:   template argument deduction/substitution failed:
test.cpp:95:27: note:   mismatched types ‘std::shared_ptr<_Tp>’ and ‘A1*’
   95 |     A2() {A1 a1; a1ptr = &a1;}
      |                           ^~
In file included from /usr/include/c++/10/memory:84,
                 from test.cpp:6:
/usr/include/c++/10/bits/shared_ptr.h:398:2: note: candidate: ‘template<class _Yp, class _Del> std::shared_ptr<_Tp>::_Assignable<std::unique_ptr<_Up, _Ep> > std::shared_ptr<_Tp>::operator=(std::unique_ptr<_Up, _Ep>&&) [with _Yp = _Yp; _Del = _Del; _Tp = A1]’
  398 |  operator=(unique_ptr<_Yp, _Del>&& __r)
      |  ^~~~~~~~
/usr/include/c++/10/bits/shared_ptr.h:398:2: note:   template argument deduction/substitution failed:
test.cpp:95:27: note:   mismatched types ‘std::unique_ptr<_Tp, _Dp>’ and ‘A1*’
   95 |     A2() {A1 a1; a1ptr = &a1;}
      |                           ^~
test.cpp: At global scope:
test.cpp:105:38: error: ‘a1’ was not declared in this scope; did you mean ‘v1’?
  105 | const std::vector<std::string> v1(1, a1);
      |                                      ^~
      |                                      v1
test.cpp:107:32: error: redefinition of ‘const std::vector<std::__cxx11::basic_string<char> > v1’
  107 | const std::vector<std::string> v1(1, n1);
      |                                ^~
test.cpp:105:32: note: ‘const std::vector<std::__cxx11::basic_string<char> > v1’ previously declared here
  105 | const std::vector<std::string> v1(1, a1);
      |                                ^~
test.cpp:107:38: error: ‘n1’ was not declared in this scope; did you mean ‘v1’?
  107 | const std::vector<std::string> v1(1, n1);
      |                                      ^~
      |                                      v1
test.cpp:109:36: error: invalid conversion from ‘const std::vector<std::__cxx11::basic_string<char> >*’ to ‘std::vector<std::__cxx11::basic_string<char> >*’ [-fpermissive]
  109 | std::vector<std::string> * v1_cptr(&v1);
      |                                    ^~~
      |                                    |
      |                                    const std::vector<std::__cxx11::basic_string<char> >*
test.cpp:111:1: error: expected unqualified-id before ‘return’
  111 | return(s1+s2);
      | ^~~~~~
test.cpp: In member function ‘int A1::f1()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:115:5: note: in expansion of macro ‘AN_BODY’
  115 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:115:5: note: in expansion of macro ‘AN_BODY’
  115 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:115:5: note: in expansion of macro ‘AN_BODY’
  115 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:115:5: note: in expansion of macro ‘AN_BODY’
  115 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:115:5: note: in expansion of macro ‘AN_BODY’
  115 |     AN_BODY;
      |     ^~~~~~~
test.cpp:116:1: error: no return statement in function returning non-void [-Werror=return-type]
  116 | }
      | ^
test.cpp: In member function ‘int A1::f2()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:120:5: note: in expansion of macro ‘AN_BODY’
  120 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:120:5: note: in expansion of macro ‘AN_BODY’
  120 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:120:5: note: in expansion of macro ‘AN_BODY’
  120 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:120:5: note: in expansion of macro ‘AN_BODY’
  120 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:120:5: note: in expansion of macro ‘AN_BODY’
  120 |     AN_BODY;
      |     ^~~~~~~
test.cpp:121:1: error: no return statement in function returning non-void [-Werror=return-type]
  121 | }
      | ^
test.cpp: In member function ‘int A1::f3()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:125:5: note: in expansion of macro ‘AN_BODY’
  125 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:125:5: note: in expansion of macro ‘AN_BODY’
  125 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:125:5: note: in expansion of macro ‘AN_BODY’
  125 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:125:5: note: in expansion of macro ‘AN_BODY’
  125 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:125:5: note: in expansion of macro ‘AN_BODY’
  125 |     AN_BODY;
      |     ^~~~~~~
test.cpp:126:1: error: no return statement in function returning non-void [-Werror=return-type]
  126 | }
      | ^
test.cpp: In member function ‘int A1::f4()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:130:5: note: in expansion of macro ‘AN_BODY’
  130 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:130:5: note: in expansion of macro ‘AN_BODY’
  130 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:130:5: note: in expansion of macro ‘AN_BODY’
  130 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:130:5: note: in expansion of macro ‘AN_BODY’
  130 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:130:5: note: in expansion of macro ‘AN_BODY’
  130 |     AN_BODY;
      |     ^~~~~~~
test.cpp:131:1: error: no return statement in function returning non-void [-Werror=return-type]
  131 | }
      | ^
test.cpp: In member function ‘int A1::f5()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:135:5: note: in expansion of macro ‘AN_BODY’
  135 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:135:5: note: in expansion of macro ‘AN_BODY’
  135 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:135:5: note: in expansion of macro ‘AN_BODY’
  135 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:135:5: note: in expansion of macro ‘AN_BODY’
  135 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:135:5: note: in expansion of macro ‘AN_BODY’
  135 |     AN_BODY;
      |     ^~~~~~~
test.cpp:136:1: error: no return statement in function returning non-void [-Werror=return-type]
  136 | }
      | ^
test.cpp: In member function ‘int A1::f6()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:140:5: note: in expansion of macro ‘AN_BODY’
  140 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:140:5: note: in expansion of macro ‘AN_BODY’
  140 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:140:5: note: in expansion of macro ‘AN_BODY’
  140 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:140:5: note: in expansion of macro ‘AN_BODY’
  140 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:140:5: note: in expansion of macro ‘AN_BODY’
  140 |     AN_BODY;
      |     ^~~~~~~
test.cpp:141:1: error: no return statement in function returning non-void [-Werror=return-type]
  141 | }
      | ^
test.cpp: In member function ‘int A1::f7()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:145:5: note: in expansion of macro ‘AN_BODY’
  145 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:145:5: note: in expansion of macro ‘AN_BODY’
  145 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:145:5: note: in expansion of macro ‘AN_BODY’
  145 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:145:5: note: in expansion of macro ‘AN_BODY’
  145 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:145:5: note: in expansion of macro ‘AN_BODY’
  145 |     AN_BODY;
      |     ^~~~~~~
test.cpp:146:1: error: no return statement in function returning non-void [-Werror=return-type]
  146 | }
      | ^
test.cpp: In member function ‘int A1::f8()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:150:5: note: in expansion of macro ‘AN_BODY’
  150 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:150:5: note: in expansion of macro ‘AN_BODY’
  150 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:150:5: note: in expansion of macro ‘AN_BODY’
  150 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:150:5: note: in expansion of macro ‘AN_BODY’
  150 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:150:5: note: in expansion of macro ‘AN_BODY’
  150 |     AN_BODY;
      |     ^~~~~~~
test.cpp:151:1: error: no return statement in function returning non-void [-Werror=return-type]
  151 | }
      | ^
test.cpp: In member function ‘int A1::f9()’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:155:5: note: in expansion of macro ‘AN_BODY’
  155 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:155:5: note: in expansion of macro ‘AN_BODY’
  155 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:155:5: note: in expansion of macro ‘AN_BODY’
  155 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:155:5: note: in expansion of macro ‘AN_BODY’
  155 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:155:5: note: in expansion of macro ‘AN_BODY’
  155 |     AN_BODY;
      |     ^~~~~~~
test.cpp:156:1: error: no return statement in function returning non-void [-Werror=return-type]
  156 | }
      | ^
test.cpp: At global scope:
test.cpp:158:5: error: no declaration matches ‘int A1::f10()’
  158 | int A1::f10()
      |     ^~
test.cpp:158:5: note: no functions named ‘int A1::f10()’
test.cpp:8:7: note: ‘class A1’ defined here
    8 | class A1
      |       ^~
test.cpp: In function ‘int main(int, char**)’:
test.cpp:101:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:165:5: note: in expansion of macro ‘AN_BODY’
  165 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:101:22: note:   candidate expects 3 arguments, 1 provided
  101 |     std::string s1(x1);                                            \
      |                      ^
test.cpp:165:5: note: in expansion of macro ‘AN_BODY’
  165 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:102:22: error: no matching function for call to ‘std::__cxx11::basic_string<char>::basic_string(A1&)’
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:165:5: note: in expansion of macro ‘AN_BODY’
  165 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:625:9: note: candidate: ‘template<class _InputIterator, class> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(_InputIterator, _InputIterator, const _Alloc&) [with _InputIterator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  625 |         basic_string(_InputIterator __beg, _InputIterator __end,
      |         ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:625:9: note:   template argument deduction/substitution failed:
test.cpp:102:22: note:   candidate expects 3 arguments, 1 provided
  102 |     std::string s2(x2);                                            \
      |                      ^
test.cpp:165:5: note: in expansion of macro ‘AN_BODY’
  165 |     AN_BODY;
      |     ^~~~~~~
In file included from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /usr/include/c++/10/system_error:41,
                 from /usr/include/c++/10/mutex:42,
                 from test.cpp:3:
/usr/include/c++/10/bits/basic_string.h:587:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  587 |       basic_string(basic_string&& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:587:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:583:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  583 |       basic_string(const basic_string& __str, const _Alloc& __a)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:583:7: note:   candidate expects 2 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:579:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::initializer_list<_Tp>, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:579:45: note:   no known conversion for argument 1 from ‘A1’ to ‘std::initializer_list<char>’
  579 |       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:552:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  552 |       basic_string(basic_string&& __str) noexcept
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:552:35: note:   no known conversion for argument 1 from ‘A1’ to ‘std::__cxx11::basic_string<char>&&’
  552 |       basic_string(basic_string&& __str) noexcept
      |                    ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  540 |       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:540:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:525:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:525:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const char*’
  525 |       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:510:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  510 |       basic_string(const _CharT* __s, size_type __n,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:510:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:492:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  492 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:492:7: note:   candidate expects 4 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:476:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  476 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:476:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:461:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]’
  461 |       basic_string(const basic_string& __str, size_type __pos,
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:461:7: note:   candidate expects 3 arguments, 1 provided
/usr/include/c++/10/bits/basic_string.h:448:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  448 |       basic_string(const basic_string& __str)
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:448:40: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::__cxx11::basic_string<char>&’
  448 |       basic_string(const basic_string& __str)
      |                    ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/10/bits/basic_string.h:440:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:440:34: note:   no known conversion for argument 1 from ‘A1’ to ‘const std::allocator<char>&’
  440 |       basic_string(const _Alloc& __a) _GLIBCXX_NOEXCEPT
      |                    ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/basic_string.h:431:7: note: candidate: ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’
  431 |       basic_string()
      |       ^~~~~~~~~~~~
/usr/include/c++/10/bits/basic_string.h:431:7: note:   candidate expects 0 arguments, 1 provided
test.cpp:103:8: error: unused variable ‘n1’ [-Werror=unused-variable]
  103 | Nested n1;
      |        ^~
test.cpp:165:5: note: in expansion of macro ‘AN_BODY’
  165 |     AN_BODY;
      |     ^~~~~~~
cc1plus: all warnings being treated as errors

Compilation exited abnormally with code 1 at Wed Jan  6 14:06:17

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (2 preceding siblings ...)
  2021-01-03 19:27 ` Duncan Greatwood
@ 2021-01-06 22:54 ` Duncan Greatwood
  2021-01-11 10:58   ` Michael Albinus
  2021-01-11 16:52 ` Duncan Greatwood
                   ` (7 subsequent siblings)
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-01-06 22:54 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 3056 bytes --]

Michael -

On Wed, Jan 6, 2021 at 5:37 AM Michael Albinus <michael.albinus@gmx.de>
wrote:

> Duncan Greatwood <dgbulk@gmail.com> writes:
>
> Hi Duncan,
>
> > I would suggest that you take a favorite large C++ autotools project,
> > add test.cpp to the source tree and Makefile.am, and see if the hang
> > reproduces for you.
>
> I don't work with C++, so I haven't.
>
[DG] Oh, no worries. Let me try and give a more explicit recipe.

This is what I did:

Download the autotools "hello world" program, and modify it as follows.

Go to https://github.com/shanecelis/amhello (or *many* other places), and
download the "hello world" code (click Code button on the github page,
choose "Download zip" for simplicity).

Expand the zip file, and cd into amhello-master directory. This is on a
linux machine, an ubuntu machine in my case.

Open configure.ac in a text editor. You'll see a section headed:
    # Checks for programs.
We need to add AC_PROG_CXX and AM_PROG_AR, so this section will look like:
    # Checks for programs.

    AC_PROG_CC
    AC_PROG_CXX
    AM_PROG_AR
    AC_PROG_LIBTOOL
Save configure.ac, and exit the text editor.

Copy my test.cpp file into the src subdirectory of amhello-master.

Open src/Makefile.am in a text editor.
Added test.cpp to the sources line, so that line looks like:
    hello_SOURCES = main.c test.cpp
Save src/Makefile.am and exit the editor.

I presume you already have the autotools toolset installed, but if not,
install them.
    sudo apt-get install -y autotools-dev autoconf

Now at the shell command line (*not* in emacs) on the target linux machine,
in the amhello-master directory:
    autoreconf --install
    ./configure
    make

You should see the many syntax errors of test.cpp spewing out in the shell.

Now *in gui emacs*, from a mac machine using Tramp,
open amhello-master/src/test.cpp remotely (using tramp) on the remote linux
machine.
With that remote test.cpp open, In emacs, do
    M-compile
    Use the compile command: make -k

Tramp window hangs

As you noted prior, if you use compile command "gcc test.cpp", tramp does
not hang. Only if you use compile command "make" does it hang.

I was using my macbook laptop for the GUI-emacs-with-tramp, and ubuntu for
the target linux machine. I was using emacs 26.2 gui-mode, but no reason to
suppose it varies with other emacs versions.

I did try it with a Linux laptop, running emacs-gui (26.3) and tramp to
connect to the remote Linux host. However, in that case the issue did *not*
reproduce for me, at least using this method. Perhaps emacs/tramp must be
running from a mac for the issue to show up.

Hope this helps.
Thanks once more.
Duncan



>
> > For your reference, I am also pasting the output from the hung tramp
> > window when I added test.cpp to a library within one of my own larger
> > projects.
>
> I tried to mimic that, but it still just shows all errors, and no hung
> window. Tested with recent Tramp 2.5.0 and all Emacs versions 26, 27,
> 28. See appended compile output.
>
> > Regards,
> > D.
>
> Best regards, Michael.

[-- Attachment #2: Type: text/html, Size: 4551 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-06 22:54 ` Duncan Greatwood
@ 2021-01-11 10:58   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-11 10:58 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Michael -

Hi Duncan,

> This is what I did:

Thanks for the recipe. Today, I found the time to apply.

> Now *in gui emacs*, from a mac machine using Tramp, open
> amhello-master/src/test.cpp remotely (using tramp) on the remote linux
> machine.
> With that remote test.cpp open, In emacs, do
>     M-compile
>     Use the compile command: make -k
>
> Tramp window hangs
>
> I was using my macbook laptop for the GUI-emacs-with-tramp, and ubuntu
> for the target linux machine. I was using emacs 26.2 gui-mode, but no
> reason to suppose it varies with other emacs versions.
>
> I did try it with a Linux laptop, running emacs-gui (26.3) and tramp
> to connect to the remote Linux host. However, in that case the issue
> did *not* reproduce for me, at least using this method. Perhaps
> emacs/tramp must be running from a mac for the issue to show up.

Well my local machine running Emacs is Fedora 33. And, as expected, make -k
didn't hang :-(

Since I have no macOS machine, I fear I cannot debug the problem.

> Hope this helps.
> Thanks once more.
> Duncan

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (3 preceding siblings ...)
  2021-01-06 22:54 ` Duncan Greatwood
@ 2021-01-11 16:52 ` Duncan Greatwood
  2021-01-11 17:56   ` Michael Albinus
  2021-01-12  4:34 ` Duncan Greatwood
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-01-11 16:52 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 839 bytes --]

Hi Michael -

Thanks for trying.

Is there a way for me to capture any trace, call-stack or similar when the
emacs window is in the tramp-hung state? I could share that back to you, if
practical.

Alternatively, if you had time and could spend the few $s (it's "pay as you
go"), you could try from a Mac on Amazon.
https://aws.amazon.com/ec2/instance-types/mac/

Finally, presuming we can't fix the underlying issue on mac, do you know
approximately when the version of tramp that fixes the "Ctrl-G x3 Fails to
Interrupt Hung Tramp" issue will make it to release? The December 29th
version I tried coupled with emacs 27.1 seemed to fix the ctrl-g issue but
otherwise was quite inclined to crash-and-exit emacs. I know the tramp
version I tried is an alpha so no problem, just wondering when it may reach
general release?

Regards,
Duncan.

[-- Attachment #2: Type: text/html, Size: 1083 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-11 16:52 ` Duncan Greatwood
@ 2021-01-11 17:56   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-11 17:56 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Hi Michael -

Hi Duncan,

> Is there a way for me to capture any trace, call-stack or similar when
> the emacs window is in the tramp-hung state? I could share that back
> to you, if practical.

Good News: I have a FreeBSD 12.1 VM hanging around. Installing Emacs 28
on that machine, trying your recipe with my remote Ubuntu machine, and
voilà - it hangs. Great :-)

Well, C-g several times doesn't kill the compile process, but so what: I
can test now. Will play with this next days, as time permits.

> Alternatively, if you had time and could spend the few $s (it's "pay
> as you go"), you could try from a Mac on Amazon.
> https://aws.amazon.com/ec2/instance-types/mac/

Ah, I didn't know. Good to have it as fallback, I don't care to share
some few $s ...  But I haven't used this type of OS ever, so I would
need to learn how to install Emacs there.

> Finally, presuming we can't fix the underlying issue on mac, do you
> know approximately when the version of tramp that fixes the "Ctrl-G x3
> Fails to Interrupt Hung Tramp" issue will make it to release? The
> December 29th version I tried coupled with emacs 27.1 seemed to fix
> the ctrl-g issue but otherwise was quite inclined to crash-and-exit
> emacs. I know the tramp version I tried is an alpha so no problem,
> just wondering when it may reach general release?

It is Tramp 2.5.0, which I have released meanwhile via GNU ELPA. So you
might try to install it from there. Emacs 28, which will carry it
built-in, is still months away from a release. I wouldn't even bet that
this will happen this year; currently Emacs 27.2 has started its
pretest. However, I plan regular Tramp 2.5 releases via GNU ELPA (once a
month or so).

What do you mean with "crash-and-exit emacs"? Is it just because of the
changed Tramp version?

There have been bug reports that Tramp could crash Emacs on macOS. But
finally, it wasn't a Tramp issue, but rather a bug in Emacs which was
uncovered by Tramp. This is fixed now in the Emacs repository, see
bug#24472, bug#37299, bug#37557. The bugs are merged, so it seems to be
the same problem.

If you see other problems related to Tramp 2.5.0, pls report. I'll
happily try to fix them.

> Regards,
> Duncan.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (4 preceding siblings ...)
  2021-01-11 16:52 ` Duncan Greatwood
@ 2021-01-12  4:34 ` Duncan Greatwood
  2021-01-12  9:02   ` Michael Albinus
  2021-01-12 15:02   ` Michael Albinus
  2021-01-29  5:15 ` Duncan Greatwood
                   ` (5 subsequent siblings)
  11 siblings, 2 replies; 30+ messages in thread
From: Duncan Greatwood @ 2021-01-12  4:34 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 675 bytes --]

I hadn't thought of FreeBSD, but, since it's said that parts of macos
originated with FreeBSD it was a smart idea... glad it worked!

Regarding the crashes with the newest tramp I tried, I didn't look at them
with precision, sorry. From the bugs you mentioned:

   - bug#24472, bug#37299 (menu bar) - I did see a menu bar crash, maybe
   the same thing(s)
   - bug#37557 scrolling - I didn't notice this one, but perhaps the keys I
   pressed that seemed to "cause" a crash were scrolling the window.

If crashing remains an issue in a little while, I can try and recreate, and
will file a new bug.

Meanwhile, good luck with debugging these bug#45518 issues.

Thanks again!

[-- Attachment #2: Type: text/html, Size: 880 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-12  4:34 ` Duncan Greatwood
@ 2021-01-12  9:02   ` Michael Albinus
  2021-01-12 15:02   ` Michael Albinus
  1 sibling, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-12  9:02 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

Hi Duncan,

> I hadn't thought of FreeBSD, but, since it's said that parts of macos
> originated with FreeBSD it was a smart idea... glad it worked!

I'm still fighting with FreeBSD Emacs to get it debugged after
blocking. But Tramp 2.5.0 has a new feature called "direct async
processes", which is an optimization for process calls in some
environments. I've tried it here, and indeed, Emacs does not block when
compiling the remote example.

You could try it yourself. Eval

(add-to-list 'tramp-connection-properties
             (list (regexp-quote "/ssh:user@host:")
                   "direct-async-process" t))

on a fresh Emacs instance, before you connect to
remote. "/ssh:user@host:" must be adapted, of course. See

(info "(tramp) Improving performance of asynchronous remote processes")

for details (this require the info file from Tramp 2.5.0).

> Thanks again!

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-12  4:34 ` Duncan Greatwood
  2021-01-12  9:02   ` Michael Albinus
@ 2021-01-12 15:02   ` Michael Albinus
  1 sibling, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-12 15:02 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 669 bytes --]

Duncan Greatwood <dgbulk@gmail.com> writes:

Hi Duncan,

> Meanwhile, good luck with debugging these bug#45518 issues.

Finally, I nailed it down. In the (remote) compilation process, there is
a process filter, which calls `file-truename' if it detects an
error. This works one or two times, but then the (remote) compilation
process comes in conflict with the (remote) Tramp process responsible
for `file-truename'.

The following patch has fixed the issue for me on my FreeBSD machine. It
is on top of Emacs' git master; but likely it works also for your Emacs
27 (not tested by me). Could you check, whether this helps you?

> Thanks again!

Best regards, Michael.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1153 bytes --]

*** /tmp/ediffZ4hAwi	2021-01-12 16:00:49.593081437 +0100
--- /home/albinus/src/emacs/lisp/progmodes/compile.el	2021-01-12 15:52:02.111270252 +0100
***************
*** 3041,3047 ****
  	    ;; Get the specified directory from FILE.
  	    (spec-directory
               (if (cdr file)
! 		 (file-truename (concat comint-file-name-prefix (cdr file))))))

  	;; Check for a comint-file-name-prefix and prepend it if appropriate.
  	;; (This is very useful for compilation-minor-mode in an rlogin-mode
--- 3041,3052 ----
  	    ;; Get the specified directory from FILE.
  	    (spec-directory
               (if (cdr file)
!                  ;; This function is active in `compilation-filter'.
!                  ;; There could be problems to call `file-truename'
!                  ;; for remote compilation processes.
! 		 (if (file-remote-p default-directory)
! 		     (concat comint-file-name-prefix (cdr file))
! 		   (file-truename (concat comint-file-name-prefix (cdr file)))))))

  	;; Check for a comint-file-name-prefix and prepend it if appropriate.
  	;; (This is very useful for compilation-minor-mode in an rlogin-mode

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (5 preceding siblings ...)
  2021-01-12  4:34 ` Duncan Greatwood
@ 2021-01-29  5:15 ` Duncan Greatwood
  2021-01-29  8:53   ` Michael Albinus
  2021-02-10 15:40   ` Michael Albinus
  2021-02-14  1:38 ` Duncan Greatwood
                   ` (4 subsequent siblings)
  11 siblings, 2 replies; 30+ messages in thread
From: Duncan Greatwood @ 2021-01-29  5:15 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518


[-- Attachment #1.1: Type: text/plain, Size: 2577 bytes --]

Hi Michael -

Got back to this.

Good news! The patch for compile.el, applied to Emacs 27.1, fixes the issue
of the tramp window hanging in my test cases, running tramp from MAC.

There is still one tramp hanging issue I saw in my testing. This is a much
less serious issue (pressing ctrl-G once "unhangs"), but thought I'd
mention it here. LMK if you'd prefer a separate bug report and I'll create
one.

If, during a "make" via tramp with many syntax errors, you click on one of
the early errors produced in the tramp window, the compile pauses and the
source window does not move to the error. Emacs appears to hang.

If you press ctrl-G, then the compile continues, no problem, until
eventually exiting.

I also noticed the same effect if I just try and type a few characters into
the source file while the make is going on - the compile hangs, and emacs
appears to hang, until I press ctrl-G to allow it to continue.

When I perform this operation directly in emacs on the ubuntu machine (i.e.
without using tramp), clicking on an early error message while "make"
continues to run does not hang anything - the "make" process continues and
meanwhile (even before make completes) the source window moves to the error
that I clicked on. Likewise I can type characters into the test.cpp source
file during make without causing a hang.

I am enclosing another test.cpp with even more errors to make it easier to
catch this issue (you can just drop it into the src directory you were
using for the last setup, overwriting the prior test.cpp).

By the way, this time, the issue reproduces for me regardless of whether I
am running the emacs-tramp on a Mac or on an ubuntu client; as you'll
recall, the target host is ubuntu in both cases.

Thanks again for fixing the main hanging issue!
Duncan.

On Tue, Jan 12, 2021 at 7:02 AM Michael Albinus <michael.albinus@gmx.de>
wrote:

> Duncan Greatwood <dgbulk@gmail.com> writes:
>
> Hi Duncan,
>
> > Meanwhile, good luck with debugging these bug#45518 issues.
>
> Finally, I nailed it down. In the (remote) compilation process, there is
> a process filter, which calls `file-truename' if it detects an
> error. This works one or two times, but then the (remote) compilation
> process comes in conflict with the (remote) Tramp process responsible
> for `file-truename'.
>
> The following patch has fixed the issue for me on my FreeBSD machine. It
> is on top of Emacs' git master; but likely it works also for your Emacs
> 27 (not tested by me). Could you check, whether this helps you?
>
> > Thanks again!
>
> Best regards, Michael.
>

[-- Attachment #1.2: Type: text/html, Size: 3314 bytes --]

[-- Attachment #2: test.cpp --]
[-- Type: application/octet-stream, Size: 31142 bytes --]

// test.cpp - for lots of syntax errors

#include <mutex>
#include <string>
#include <vector>
#include <memory>         

/////////////////////////////

class A1
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
class Nested
{
    A1 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A1> a1ptr;
    A2() {A1 a1; a1ptr = &a1;}
};

#define AN_BODY                                                    \
    A1 x1;                                                         \
    A1 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A1::f1()
{
    AN_BODY;
}

int A1::f2()
{
    AN_BODY;
}

int A1::f3()
{
    AN_BODY;
}

int A1::f4()
{
    AN_BODY;
}

int A1::f5()
{
    AN_BODY;
}

int A1::f6()
{
    AN_BODY;
}

int A1::f7()
{
    AN_BODY;
}

int A1::f8()
{
    AN_BODY;
}

int A1::f9()
{
    AN_BODY;
}

int A1::f10()
{
    AN_BODY;
}


int main(int argc, char* argv[])
{
    AN_BODY;
}


/////////////////////////////

class A11
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
class Nested1
{
    A11 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A11> a1ptr;
    A2() {A11 a1; a1ptr = &a1;}
};

#define AN_BODY1                                                    \
    A11 x1;                                                         \
    A11 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested1 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A11::f1()
{
    AN_BODY1;
}

int A11::f2()
{
    AN_BODY1;
}

int A11::f3()
{
    AN_BODY1;
}

int A11::f4()
{
    AN_BODY1;
}

int A11::f5()
{
    AN_BODY1;
}

int A11::f6()
{
    AN_BODY1;
}

int A11::f7()
{
    AN_BODY1;
}

int A11::f8()
{
    AN_BODY1;
}

int A11::f9()
{
    AN_BODY1;
}

int A11::f10()
{
    AN_BODY1;
}


int main1(int argc, char* argv[])
{
    AN_BODY1;
}


/////////////////////////////

class A111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
class Nested11
{
    A111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A111> a1ptr;
    A2() {A111 a1; a1ptr = &a1;}
};

#define AN_BODY11                                                    \
    A111 x1;                                                         \
    A111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested11 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A111::f1()
{
    AN_BODY11;
}

int A111::f2()
{
    AN_BODY11;
}

int A111::f3()
{
    AN_BODY11;
}

int A111::f4()
{
    AN_BODY11;
}

int A111::f5()
{
    AN_BODY11;
}

int A111::f6()
{
    AN_BODY11;
}

int A111::f7()
{
    AN_BODY11;
}

int A111::f8()
{
    AN_BODY11;
}

int A111::f9()
{
    AN_BODY11;
}

int A111::f10()
{
    AN_BODY11;
}


int main11(int argc, char* argv[])
{
    AN_BODY11;
}


/////////////////////////////

class A1111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
class Nested111
{
    A1111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A1111> a1ptr;
    A2() {A1111 a1; a1ptr = &a1;}
};

#define AN_BODY111                                                    \
    A1111 x1;                                                         \
    A1111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A1111::f1()
{
    AN_BODY111;
}

int A1111::f2()
{
    AN_BODY111;
}

int A1111::f3()
{
    AN_BODY111;
}

int A1111::f4()
{
    AN_BODY111;
}

int A1111::f5()
{
    AN_BODY111;
}

int A1111::f6()
{
    AN_BODY111;
}

int A1111::f7()
{
    AN_BODY111;
}

int A1111::f8()
{
    AN_BODY111;
}

int A1111::f9()
{
    AN_BODY111;
}

int A1111::f10()
{
    AN_BODY111;
}


int main111(int argc, char* argv[])
{
    AN_BODY111;
}


/////////////////////////////

class A11111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
class Nested1111
{
    A11111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A11111> a1ptr;
    A2() {A11111 a1; a1ptr = &a1;}
};

#define AN_BODY1111                                                    \
    A11111 x1;                                                         \
    A11111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested1111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A11111::f1()
{
    AN_BODY1111;
}

int A11111::f2()
{
    AN_BODY1111;
}

int A11111::f3()
{
    AN_BODY1111;
}

int A11111::f4()
{
    AN_BODY1111;
}

int A11111::f5()
{
    AN_BODY1111;
}

int A11111::f6()
{
    AN_BODY1111;
}

int A11111::f7()
{
    AN_BODY1111;
}

int A11111::f8()
{
    AN_BODY1111;
}

int A11111::f9()
{
    AN_BODY1111;
}

int A11111::f10()
{
    AN_BODY1111;
}


int main1111(int argc, char* argv[])
{
    AN_BODY1111;
}


/////////////////////////////

class A111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
class Nested11111
{
    A111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A111111> a1ptr;
    A2() {A111111 a1; a1ptr = &a1;}
};

#define AN_BODY11111                                                    \
    A111111 x1;                                                         \
    A111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested11111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A111111::f1()
{
    AN_BODY11111;
}

int A111111::f2()
{
    AN_BODY11111;
}

int A111111::f3()
{
    AN_BODY11111;
}

int A111111::f4()
{
    AN_BODY11111;
}

int A111111::f5()
{
    AN_BODY11111;
}

int A111111::f6()
{
    AN_BODY11111;
}

int A111111::f7()
{
    AN_BODY11111;
}

int A111111::f8()
{
    AN_BODY11111;
}

int A111111::f9()
{
    AN_BODY11111;
}

int A111111::f10()
{
    AN_BODY11111;
}


int main11111(int argc, char* argv[])
{
    AN_BODY11111;
}


/////////////////////////////

class A1111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
class Nested111111
{
    A1111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A1111111> a1ptr;
    A2() {A1111111 a1; a1ptr = &a1;}
};

#define AN_BODY111111                                                    \
    A1111111 x1;                                                         \
    A1111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A1111111::f1()
{
    AN_BODY111111;
}

int A1111111::f2()
{
    AN_BODY111111;
}

int A1111111::f3()
{
    AN_BODY111111;
}

int A1111111::f4()
{
    AN_BODY111111;
}

int A1111111::f5()
{
    AN_BODY111111;
}

int A1111111::f6()
{
    AN_BODY111111;
}

int A1111111::f7()
{
    AN_BODY111111;
}

int A1111111::f8()
{
    AN_BODY111111;
}

int A1111111::f9()
{
    AN_BODY111111;
}

int A1111111::f10()
{
    AN_BODY111111;
}


int main111111(int argc, char* argv[])
{
    AN_BODY111111;
}


/////////////////////////////

class A11111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
class Nested1111111
{
    A11111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A11111111> a1ptr;
    A2() {A11111111 a1; a1ptr = &a1;}
};

#define AN_BODY1111111                                                    \
    A11111111 x1;                                                         \
    A11111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested1111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A11111111::f1()
{
    AN_BODY1111111;
}

int A11111111::f2()
{
    AN_BODY1111111;
}

int A11111111::f3()
{
    AN_BODY1111111;
}

int A11111111::f4()
{
    AN_BODY1111111;
}

int A11111111::f5()
{
    AN_BODY1111111;
}

int A11111111::f6()
{
    AN_BODY1111111;
}

int A11111111::f7()
{
    AN_BODY1111111;
}

int A11111111::f8()
{
    AN_BODY1111111;
}

int A11111111::f9()
{
    AN_BODY1111111;
}

int A11111111::f10()
{
    AN_BODY1111111;
}


int main1111111(int argc, char* argv[])
{
    AN_BODY1111111;
}


/////////////////////////////

class A111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
class Nested11111111
{
    A111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A111111111> a1ptr;
    A2() {A111111111 a1; a1ptr = &a1;}
};

#define AN_BODY11111111                                                    \
    A111111111 x1;                                                         \
    A111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested11111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A111111111::f1()
{
    AN_BODY11111111;
}

int A111111111::f2()
{
    AN_BODY11111111;
}

int A111111111::f3()
{
    AN_BODY11111111;
}

int A111111111::f4()
{
    AN_BODY11111111;
}

int A111111111::f5()
{
    AN_BODY11111111;
}

int A111111111::f6()
{
    AN_BODY11111111;
}

int A111111111::f7()
{
    AN_BODY11111111;
}

int A111111111::f8()
{
    AN_BODY11111111;
}

int A111111111::f9()
{
    AN_BODY11111111;
}

int A111111111::f10()
{
    AN_BODY11111111;
}


int main11111111(int argc, char* argv[])
{
    AN_BODY11111111;
}


/////////////////////////////

class A1111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
class Nested111111111
{
    A1111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A1111111111> a1ptr;
    A2() {A1111111111 a1; a1ptr = &a1;}
};

#define AN_BODY111111111                                                    \
    A1111111111 x1;                                                         \
    A1111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested111111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A1111111111::f1()
{
    AN_BODY111111111;
}

int A1111111111::f2()
{
    AN_BODY111111111;
}

int A1111111111::f3()
{
    AN_BODY111111111;
}

int A1111111111::f4()
{
    AN_BODY111111111;
}

int A1111111111::f5()
{
    AN_BODY111111111;
}

int A1111111111::f6()
{
    AN_BODY111111111;
}

int A1111111111::f7()
{
    AN_BODY111111111;
}

int A1111111111::f8()
{
    AN_BODY111111111;
}

int A1111111111::f9()
{
    AN_BODY111111111;
}

int A1111111111::f10()
{
    AN_BODY111111111;
}


int main111111111(int argc, char* argv[])
{
    AN_BODY111111111;
}


/////////////////////////////

class A11111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
class Nested1111111111
{
    A11111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A11111111111> a1ptr;
    A2() {A11111111111 a1; a1ptr = &a1;}
};

#define AN_BODY1111111111                                                    \
    A11111111111 x1;                                                         \
    A11111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested1111111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A11111111111::f1()
{
    AN_BODY1111111111;
}

int A11111111111::f2()
{
    AN_BODY1111111111;
}

int A11111111111::f3()
{
    AN_BODY1111111111;
}

int A11111111111::f4()
{
    AN_BODY1111111111;
}

int A11111111111::f5()
{
    AN_BODY1111111111;
}

int A11111111111::f6()
{
    AN_BODY1111111111;
}

int A11111111111::f7()
{
    AN_BODY1111111111;
}

int A11111111111::f8()
{
    AN_BODY1111111111;
}

int A11111111111::f9()
{
    AN_BODY1111111111;
}

int A11111111111::f10()
{
    AN_BODY1111111111;
}


int main1111111111(int argc, char* argv[])
{
    AN_BODY1111111111;
}


/////////////////////////////

class A111111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
class Nested11111111111
{
    A111111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A111111111111> a1ptr;
    A2() {A111111111111 a1; a1ptr = &a1;}
};

#define AN_BODY11111111111                                                    \
    A111111111111 x1;                                                         \
    A111111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested11111111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A111111111111::f1()
{
    AN_BODY11111111111;
}

int A111111111111::f2()
{
    AN_BODY11111111111;
}

int A111111111111::f3()
{
    AN_BODY11111111111;
}

int A111111111111::f4()
{
    AN_BODY11111111111;
}

int A111111111111::f5()
{
    AN_BODY11111111111;
}

int A111111111111::f6()
{
    AN_BODY11111111111;
}

int A111111111111::f7()
{
    AN_BODY11111111111;
}

int A111111111111::f8()
{
    AN_BODY11111111111;
}

int A111111111111::f9()
{
    AN_BODY11111111111;
}

int A111111111111::f10()
{
    AN_BODY11111111111;
}


int main11111111111(int argc, char* argv[])
{
    AN_BODY11111111111;
}


/////////////////////////////

class A1111111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
class Nested111111111111
{
    A1111111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A1111111111111> a1ptr;
    A2() {A1111111111111 a1; a1ptr = &a1;}
};

#define AN_BODY111111111111                                                    \
    A1111111111111 x1;                                                         \
    A1111111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested111111111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A1111111111111::f1()
{
    AN_BODY111111111111;
}

int A1111111111111::f2()
{
    AN_BODY111111111111;
}

int A1111111111111::f3()
{
    AN_BODY111111111111;
}

int A1111111111111::f4()
{
    AN_BODY111111111111;
}

int A1111111111111::f5()
{
    AN_BODY111111111111;
}

int A1111111111111::f6()
{
    AN_BODY111111111111;
}

int A1111111111111::f7()
{
    AN_BODY111111111111;
}

int A1111111111111::f8()
{
    AN_BODY111111111111;
}

int A1111111111111::f9()
{
    AN_BODY111111111111;
}

int A1111111111111::f10()
{
    AN_BODY111111111111;
}


int main111111111111(int argc, char* argv[])
{
    AN_BODY111111111111;
}


/////////////////////////////

class A11111111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
class Nested1111111111111
{
    A11111111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A11111111111111> a1ptr;
    A2() {A11111111111111 a1; a1ptr = &a1;}
};

#define AN_BODY1111111111111                                                    \
    A11111111111111 x1;                                                         \
    A11111111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested1111111111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A11111111111111::f1()
{
    AN_BODY1111111111111;
}

int A11111111111111::f2()
{
    AN_BODY1111111111111;
}

int A11111111111111::f3()
{
    AN_BODY1111111111111;
}

int A11111111111111::f4()
{
    AN_BODY1111111111111;
}

int A11111111111111::f5()
{
    AN_BODY1111111111111;
}

int A11111111111111::f6()
{
    AN_BODY1111111111111;
}

int A11111111111111::f7()
{
    AN_BODY1111111111111;
}

int A11111111111111::f8()
{
    AN_BODY1111111111111;
}

int A11111111111111::f9()
{
    AN_BODY1111111111111;
}

int A11111111111111::f10()
{
    AN_BODY1111111111111;
}


int main1111111111111(int argc, char* argv[])
{
    AN_BODY1111111111111;
}


/////////////////////////////

class A111111111111111
{
    int f1();
    int f2();
    int f3();
    int f4();
    int f5();
    int f6();
    int f7();
    int f8();
    int f9();
};

class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
class Nested11111111111111
{
    A111111111111111 m1;
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};
};


class A2
{
    std::shared_ptr<A111111111111111> a1ptr;
    A2() {A111111111111111 a1; a1ptr = &a1;}
};

#define AN_BODY11111111111111                                                    \
    A111111111111111 x1;                                                         \
    A111111111111111 x2;                                                         \
    std::string s1(x1);                                            \
    std::string s2(x2);                                            \
Nested11111111111111 n1;                                                              \
const std::vector<std::string> v1(1, a1);                               \
const std::vector<std::string> v1(1, n1);                               \
std::vector<std::string> * v1_cptr(&v1);                                \
return(s1+s2);

int A111111111111111::f1()
{
    AN_BODY11111111111111;
}

int A111111111111111::f2()
{
    AN_BODY11111111111111;
}

int A111111111111111::f3()
{
    AN_BODY11111111111111;
}

int A111111111111111::f4()
{
    AN_BODY11111111111111;
}

int A111111111111111::f5()
{
    AN_BODY11111111111111;
}

int A111111111111111::f6()
{
    AN_BODY11111111111111;
}

int A111111111111111::f7()
{
    AN_BODY11111111111111;
}

int A111111111111111::f8()
{
    AN_BODY11111111111111;
}

int A111111111111111::f9()
{
    AN_BODY11111111111111;
}

int A111111111111111::f10()
{
    AN_BODY11111111111111;
}


int main11111111111111(int argc, char* argv[])
{
    AN_BODY11111111111111;
}



^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-29  5:15 ` Duncan Greatwood
@ 2021-01-29  8:53   ` Michael Albinus
  2021-02-10 15:40   ` Michael Albinus
  1 sibling, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-01-29  8:53 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Hi Michael -

Hi Duncan,

> Good news! The patch for compile.el, applied to Emacs 27.1, fixes the
> issue of the tramp window hanging in my test cases, running tramp from
> MAC.

Thanks for the feedback. I've pushed the patch to Emacs' master branch
(aka Emacs 28.0.50). For Emacs 27.2 it is too late, it is already in
pretest, and only fixes for serious regression bugs are possible.

> There is still one tramp hanging issue I saw in my testing. This is a
> much less serious issue (pressing ctrl-G once "unhangs"), but thought
> I'd mention it here. LMK if you'd prefer a separate bug report and
> I'll create one.

I will have a look on this next days, as time permits. No, I don't need
a new bug report.

> Thanks again for fixing the main hanging issue!
> Duncan.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-01-29  5:15 ` Duncan Greatwood
  2021-01-29  8:53   ` Michael Albinus
@ 2021-02-10 15:40   ` Michael Albinus
  2021-02-11 15:22     ` Michael Albinus
  1 sibling, 1 reply; 30+ messages in thread
From: Michael Albinus @ 2021-02-10 15:40 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Hi Michael -

Hi Duncan,

> There is still one tramp hanging issue I saw in my testing. This is a
> much less serious issue (pressing ctrl-G once "unhangs"), but thought
> I'd mention it here. LMK if you'd prefer a separate bug report and
> I'll create one.

Just an update. I've played with this for a while. I could reproduce,
and I also know where it hangs. It is accept-process-output of the Tramp
process which tries to view the file you have clicked on, vs
accept-process-output of the compile process. Both don't cooperate
sufficiently, and both hang.

I have no idea (yet) how to solve. One idea would be to start the
compilation process in another thread, but this will raise other
problems. There is some WIP to make Tramp thread-safe, but this is
stalled ATM.

> Thanks again for fixing the main hanging issue!
> Duncan.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-02-10 15:40   ` Michael Albinus
@ 2021-02-11 15:22     ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-02-11 15:22 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 1203 bytes --]

Michael Albinus <michael.albinus@gmx.de> writes:

Hi Duncan,

>> There is still one tramp hanging issue I saw in my testing. This is a
>> much less serious issue (pressing ctrl-G once "unhangs"), but thought
>> I'd mention it here. LMK if you'd prefer a separate bug report and
>> I'll create one.
>
> Just an update. I've played with this for a while. I could reproduce,
> and I also know where it hangs. It is accept-process-output of the Tramp
> process which tries to view the file you have clicked on, vs
> accept-process-output of the compile process. Both don't cooperate
> sufficiently, and both hang.
>
> I have no idea (yet) how to solve. One idea would be to start the
> compilation process in another thread, but this will raise other
> problems. There is some WIP to make Tramp thread-safe, but this is
> stalled ATM.

Since I don't know a general solution yet, I have prepared a small
patch, which suppresses visting remote files as result of a
compilation. Silently. When compilation has finished, everything is back
to normal.

See the appended patch, whether it makes the situation better for you.

>> Thanks again for fixing the main hanging issue!
>> Duncan.

Best regards, Michael.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1669 bytes --]

*** /tmp/ediffuS9ebt	2021-02-11 16:14:54.793873579 +0100
--- /net/ford/albinus/src/tramp/lisp/tramp-integration.el	2021-02-11 16:10:01.276681568 +0100
***************
*** 261,266 ****
--- 261,294 ----
  		  (delete (info-lookup->mode-cache 'symbol ',mode)
  			  (info-lookup->topic-cache 'symbol))))))))

+ ;; Compilation processes use `accept-process-output' such a way that
+ ;; Tramp's parallel `accept-process-output' blocks.  See last part of
+ ;; Bug#45518.  So we forbid them to run in parallel.  There must be a
+ ;; better solution, though.
+ (with-eval-after-load 'compile
+   (add-hook 'compilation-start-hook
+ 	    #'tramp-compile-advice-add)
+   (add-hook 'compilation-finish-functions
+ 	    #'tramp-compile-advice-remove)
+   (add-hook 'tramp-integration-unload-hook
+ 	    (lambda ()
+ 	      (remove-hook 'compilation-start-hook
+ 			   #'tramp-compile-advice-add)
+ 	      (remove-hook 'compilation-finish-functions
+ 			   #'tramp-compile-advice-remove))))
+
+ (defun tramp-compile-advice-add (proc)
+   "Don't allow remote file operations while compiling."
+   (with-current-buffer (process-buffer proc)
+     (when (file-remote-p default-directory)
+       (advice-add 'ignore :override 'compile-goto-error))))
+
+ (defun tramp-compile-advice-remove (buffer _message)
+   "Reenable remote file operations."
+   (with-current-buffer buffer
+     (when (file-remote-p  default-directory)
+       (advice-remove 'ignore 'compile-goto-error))))
+
  ;;; Default connection-local variables for Tramp:
  ;; `connection-local-set-profile-variables' and
  ;; `connection-local-set-profiles' exists since Emacs 26.1.

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (6 preceding siblings ...)
  2021-01-29  5:15 ` Duncan Greatwood
@ 2021-02-14  1:38 ` Duncan Greatwood
  2021-02-14 14:15   ` Michael Albinus
  2021-02-15 20:21 ` Duncan Greatwood
                   ` (3 subsequent siblings)
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-02-14  1:38 UTC (permalink / raw)
  To: Michael Albinus, 45518

[-- Attachment #1: Type: text/plain, Size: 1938 bytes --]

Hi Michael -

On Thu, Feb 11, 2021 at 7:22 AM Michael Albinus <michael.albinus@gmx.de>
wrote:

> Michael Albinus <michael.albinus@gmx.de> writes:
>
> Hi Duncan,
>
> >> There is still one tramp hanging issue I saw in my testing. This is a
> >> much less serious issue (pressing ctrl-G once "unhangs"), but thought
> >> I'd mention it here. LMK if you'd prefer a separate bug report and
> >> I'll create one.
> >
> > Just an update. I've played with this for a while. I could reproduce,
> > and I also know where it hangs. It is accept-process-output of the Tramp
> > process which tries to view the file you have clicked on, vs
> > accept-process-output of the compile process. Both don't cooperate
> > sufficiently, and both hang.
> >
> > I have no idea (yet) how to solve. One idea would be to start the
> > compilation process in another thread, but this will raise other
> > problems. There is some WIP to make Tramp thread-safe, but this is
> > stalled ATM.
>
> Since I don't know a general solution yet, I have prepared a small
> patch, which suppresses visting remote files as result of a
> compilation. Silently. When compilation has finished, everything is back
> to normal.
>
> See the appended patch, whether it makes the situation better for you.
>
[DG] I have applied the patch to tramp-integration.el. The earlier patch in
this thread (to compile.el, fixing the main hang) was also applied.

Unfortunately, the symptoms for this secondary "minor" hang are unchanged
for me.
This is on an Intel Mac running macos 11.2.
GNU Emacs 27.1 (build 1, x86_64-apple-darwin20.3.0, NS appkit-2022.30
Version 11.2 (Build 20D64))  of 2021-02-13
I looked at ./Contents/Resources/lisp/net/tramp-integration.elc
inside /Applications/Emacs.app and it seemed to contain the patch as
expected - at least it contains the string:
    Don't allow remote file operations while compiling
I'm not sure what's up, but LMK if there's anything I can do.

[-- Attachment #2: Type: text/html, Size: 2595 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-02-14  1:38 ` Duncan Greatwood
@ 2021-02-14 14:15   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-02-14 14:15 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Hi Michael -

Hi Duncan,

> [DG] I have applied the patch to tramp-integration.el. The earlier
> patch in this thread (to compile.el, fixing the main hang) was also
> applied.
>
> Unfortunately, the symptoms for this secondary "minor" hang are
> unchanged for me.

I've tried it with a modified Emacs 27.1 (compile.el), it works for me.

> I looked at ./Contents/Resources/lisp/net/tramp-integration.elc inside
> /Applications/Emacs.app and it seemed to contain the patch as expected
> - at least it contains the string:
>     Don't allow remote file operations while compiling
> I'm not sure what's up, but LMK if there's anything I can do.

You might check, whether the patch has applied at runtime. Check,
whether the two functions are defined: 'C-h f tramp-compile-advice-add'
and 'C-h f tramp-compile-advice-remove'. Well, the function names are
silly; I shall give them better names when pushing the patch.

Check, whether the two hook variables have changed: 'C-h v
compilation-start-hook' (should contain tramp-compile-advice-add) and
'C-h v compilation-finish-functions' (should contain
tramp-compile-advice-remove).

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (7 preceding siblings ...)
  2021-02-14  1:38 ` Duncan Greatwood
@ 2021-02-15 20:21 ` Duncan Greatwood
  2021-02-16 20:09   ` Michael Albinus
  2021-02-17  5:41 ` Duncan Greatwood
                   ` (2 subsequent siblings)
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-02-15 20:21 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 1436 bytes --]

Michael -

You might check, whether the patch has applied at runtime.

[DG] Thanks for the pointers.

C-h f tramp-compile-advice-add looks fine:

tramp-compile-advice-add is a compiled Lisp function in
‘tramp-integration.el’.

(tramp-compile-advice-add PROC)

Don’t allow remote file operations while compiling.

Remove looks fine also.

'C-h v compilation-start-hook' looks fine:

compilation-start-hook is a variable defined in ‘compile.el’.
Its value is (tramp-compile-advice-add)
Original value was nil

  This variable may be risky if used as a file-local variable.
  You can customize this variable.

Documentation:
Hook run after starting a new compilation process.
The hook is run with one argument, the new process.

and compilation-finish-functions also looks as expected.

Unfortunately, I am still seeing the hang upon clicking on an error
message while the compilation continues. Sorry to report, but it may
actually be worse than before, in that I am seeing some outright crashes of
emacs, i.e. hangs where I cannot recover by pressing ctrl-G multiple times.
I didn't see that previously with this issue, though of course it's
possibly just a coincidence that I did not.

JFYI, I am also seeing this error message displayed immediately after
compilation commences:

Error adjusting window size: (wrong number of arguments (0 . 1) 2)

Best regards as always.
Duncan.

[-- Attachment #2: Type: text/html, Size: 2151 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-02-15 20:21 ` Duncan Greatwood
@ 2021-02-16 20:09   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-02-16 20:09 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

> Michael -

Hi Duncan,

> Unfortunately, I am still seeing the hang upon clicking on an error
> message while the compilation continues. Sorry to report, but it may
> actually be worse than before, in that I am seeing some outright
> crashes of emacs, i.e. hangs where I cannot recover by pressing ctrl-G
> multiple times. I didn't see that previously with this issue, though
> of course it's possibly just a coincidence that I did not.

Hmm, just to be sure: you run Emacs 27.1 with the patched compile.el,
and you run Tramp 2.5.0.1 from GNU ELPA, with the patch in tramp-integration.el?

> JFYI, I am also seeing this error message displayed immediately after
> compilation commences:
>
>     Error adjusting window size: (wrong number of arguments (0 . 1) 2)

That seems to be unrelated, but who knows ...

> Best regards as always.
> Duncan.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (8 preceding siblings ...)
  2021-02-15 20:21 ` Duncan Greatwood
@ 2021-02-17  5:41 ` Duncan Greatwood
  2021-02-17 15:39   ` Michael Albinus
  2021-03-16  1:36 ` Duncan Greatwood
  2024-11-18 19:13 ` Alex Hutcheson via Bug reports for GNU Emacs, the Swiss army knife of text editors
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-02-17  5:41 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 952 bytes --]

Michael -

> Hmm, just to be sure: you run Emacs 27.1 with the patched compile.el,
> and you run Tramp 2.5.0.1 from GNU ELPA, with the patch in
> tramp-integration.el?

Actually, I was running Emacs 27.1 with the patched compile.el, and tramp
*as it comes in 27.1* with the patch applied to tramp-integration.el.

Prompted by your question, I downloaded Tramp 2.5.0.1 from GNU ELPA and
copied those .el files over the tramp files in .../lisp/net, applied
the patch in tramp-integration.el and recompiled the macos application. I
have the patched compile.el included as well, just to be clear.

I checked in run time, tramp-compile-advice-add and compilation-start-hook
are defined as we'd wish.

Unfortunately, I see no change in behaviour. If I click on a syntax error
message while compiling test.cpp in the autotools project via tramp, the
compile hangs until I ctrl-g out.

Not sure why the difference vs. your setup, sorry.

Best regards,
Duncan.

[-- Attachment #2: Type: text/html, Size: 2159 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-02-17  5:41 ` Duncan Greatwood
@ 2021-02-17 15:39   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-02-17 15:39 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 1285 bytes --]

Duncan Greatwood <dgbulk@gmail.com> writes:

> Michael -

Hi Duncan,

> Prompted by your question, I downloaded Tramp 2.5.0.1 from GNU ELPA
> and copied those .el files over the tramp files in .../lisp/net,
> applied the patch in tramp-integration.el and recompiled the macos
> application. I have the patched compile.el included as well, just to
> be clear.

I seriously recommend to use Emacs' package manager for installation,
and NOT to overwrite files in Emacs' installation dir. Experience tells,
that this is always good for trouble in the long run.

> I checked in run time, tramp-compile-advice-add and
> compilation-start-hook are defined as we'd wish.
>
> Unfortunately, I see no change in behaviour. If I click on a syntax
> error message while compiling test.cpp in the autotools project via
> tramp, the compile hangs until I ctrl-g out.
>
> Not sure why the difference vs. your setup, sorry.

Strange. I've reworked the Tramp patch a little bit. Function names have
changed, and more important, it has traces now. Could you please apply
this patch instead of the previous patch in tramp-integration.el? Rerun
your test with tramp-verbose set to 6, and send the Tramp debug buffer
if it still doesn't work as expected.

> Best regards,
> Duncan.

Best regards, Michael.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 2346 bytes --]

*** /tmp/edifffETTJu	2021-02-17 16:37:56.993381450 +0100
--- /home/albinus/src/tramp/lisp/tramp-integration.el	2021-02-17 14:12:36.736224836 +0100
***************
*** 41,46 ****
--- 41,47 ----
  (declare-function recentf-cleanup "recentf")
  (declare-function tramp-dissect-file-name "tramp")
  (declare-function tramp-file-name-equal-p "tramp")
+ (declare-function tramp-message "tramp")
  (declare-function tramp-tramp-file-p "tramp")
  (defvar eshell-path-env)
  (defvar ido-read-file-name-non-ido)
***************
*** 261,266 ****
--- 262,303 ----
  		  (delete (info-lookup->mode-cache 'symbol ',mode)
  			  (info-lookup->topic-cache 'symbol))))))))

+ ;;; Integration of compile.el:
+
+ ;; Compilation processes use `accept-process-output' such a way that
+ ;; Tramp's parallel `accept-process-output' blocks.  See last part of
+ ;; Bug#45518.  So we forbid them to run in parallel.  There must be a
+ ;; better solution, though.
+ (defun tramp-compile-disable-goto-error (proc)
+   "Don't allow remote file operations while compiling."
+   (with-current-buffer (process-buffer proc)
+     (when (file-remote-p default-directory)
+       (advice-add 'ignore :override 'compile-goto-error)
+       (tramp-message
+        (tramp-dissect-file-name default-directory) 4
+        "Disable `compile-goto-error'"))))
+
+ (defun tramp-compile-enable-goto-error (buffer _message)
+   "Reenable remote file operations."
+   (with-current-buffer buffer
+     (when (file-remote-p  default-directory)
+       (advice-remove 'ignore 'compile-goto-error)
+       (tramp-message
+        (tramp-dissect-file-name default-directory) 4
+        "Enable `compile-goto-error'"))))
+
+ (with-eval-after-load 'compile
+   (add-hook 'compilation-start-hook
+ 	    #'tramp-compile-disable-goto-error)
+   (add-hook 'compilation-finish-functions
+ 	    #'tramp-compile-enable-goto-error)
+   (add-hook 'tramp-integration-unload-hook
+ 	    (lambda ()
+ 	      (remove-hook 'compilation-start-hook
+ 			   #'tramp-compile-disable-goto-error)
+ 	      (remove-hook 'compilation-finish-functions
+ 			   #'tramp-compile-enable-goto-error))))
+
  ;;; Default connection-local variables for Tramp:
  ;; `connection-local-set-profile-variables' and
  ;; `connection-local-set-profiles' exists since Emacs 26.1.

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
       [not found] <CAN_Aq+rYcM7wHHWXKBqyY4P0Ew04RfkqnQUioqtUk0AOUeaRMA@mail.gmail.com>
@ 2021-02-25 18:33 ` Michael Albinus
  2021-03-15 20:49   ` Michael Albinus
  0 siblings, 1 reply; 30+ messages in thread
From: Michael Albinus @ 2021-02-25 18:33 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Duncan Greatwood <dgbulk@gmail.com> writes:

Hi Duncan,

> Any case, one thing at a time.
>
> I did manage to collect a traces file with emacs -Q.
> I clicked on error message during compile, and compile-in-tramp
> session hung. I ctrl-G-ed out, compilation continued for a while until
> emacs as a whole crashed, with compilation ongoing until that moment.
>
> Traces enclosed.

Just an interim report. I've worked over the last days on the problem.

I gave up the idea to instrument compile-goto-error. The point is that
other packages trust on this function as well, like rgrep. Disabling it
while rgrep runs is a much too heavy limitation.

Tests have shown, that Emacs 25 with the built-in Tramp 2.2.3 does not
show the problem. I'm bisecting Tramp in order to find what has
triggered the regression. That's not so easy, because not all Emacs and
Tramp versions do cooperate. Compatibility issues.

However, I believe the problem didn't exist in Tramp 2.3.1; Tramp 2.3.2
shows the regression. Compatibility issues hinder me to bisect better,
so I have started to compare both code bases. I hope to find the problem
this way, and I hope to fix it then for you and the other Tramp users.

> Duncan.

Stay tuned, and best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-02-25 18:33 ` Michael Albinus
@ 2021-03-15 20:49   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-03-15 20:49 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518

Michael Albinus <michael.albinus@gmx.de> writes:

Hi Duncan,

> However, I believe the problem didn't exist in Tramp 2.3.1; Tramp 2.3.2
> shows the regression. Compatibility issues hinder me to bisect better,
> so I have started to compare both code bases. I hope to find the problem
> this way, and I hope to fix it then for you and the other Tramp users.

Bisecting has been harder than expected, due to several reasons. At
least I have found the first problematic commit in Emacs, it is
6de77cfa9da18c5e3765c6202b61cef86409e130.

I will still need some time to find a final solution, but for the time
being you could set tramp-use-ssh-controlmaster-options to nil before
you open a remote connection. This shall prevent the problem. I would
appreciate if you could confirm this.

Now I have nailed the problem, I'm quite optmistic to solve it until
release of Tramp 2.5.0.3, scheduled for end of the month.

>> Duncan.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (9 preceding siblings ...)
  2021-02-17  5:41 ` Duncan Greatwood
@ 2021-03-16  1:36 ` Duncan Greatwood
  2021-03-16 18:30   ` Michael Albinus
  2024-11-18 19:13 ` Alex Hutcheson via Bug reports for GNU Emacs, the Swiss army knife of text editors
  11 siblings, 1 reply; 30+ messages in thread
From: Duncan Greatwood @ 2021-03-16  1:36 UTC (permalink / raw)
  To: Michael Albinus; +Cc: 45518

[-- Attachment #1: Type: text/plain, Size: 1010 bytes --]

Michael -

> I will still need some time to find a final solution, but for the time
> being you could set tramp-use-ssh-controlmaster-options to nil before
> you open a remote connection. This shall prevent the problem. I would
> appreciate if you could confirm this.
[DG] Happy to.

I checked that I still see the issue (clicking on an error message suspends
compilation until ctrl-G) without this variable being reset.

I then restarted emacs and changed the variable, as confirmed by this
help-variable output:

tramp-use-ssh-controlmaster-options is a variable defined in ‘tramp-sh.el’.
Its value is nil
Original value was t


As you predicted, the issue does *not* show-up
once tramp-use-ssh-controlmaster-options has been reset to nil like this.

This was using the version of tramp that ships with emacs 27.1. The
compile.el patch we discussed earlier is applied. JFYI, the version of ssh
on my mac is:

$ ssh -V
OpenSSH_8.1p1, LibreSSL 2.7.3


Best regards,
Duncan.

[-- Attachment #2: Type: text/html, Size: 1403 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2021-03-16  1:36 ` Duncan Greatwood
@ 2021-03-16 18:30   ` Michael Albinus
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus @ 2021-03-16 18:30 UTC (permalink / raw)
  To: Duncan Greatwood; +Cc: 45518-done

Version: 28.1

Duncan Greatwood <dgbulk@gmail.com> writes:

> Michael -

Hi Duncan,

> As you predicted, the issue does *not* show-up once
> tramp-use-ssh-controlmaster-options has been reset to nil like this.

Thanks for confirmation! I've pushed a respective patch to Tramp, as
promised it will appear with Tramp 2.5.0.3. If you are curious, you can
check it here: <https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=6c60ecd2d632ad41851e91cc53036a679c391194>.

Until Tramp 2.5.0.3 is released, you can still use the workaround
(setting tramp-use-ssh-controlmaster-options to nil), or you can apply
the patch, as you like.

> This was using the version of tramp that ships with emacs 27.1. The
> compile.el patch we discussed earlier is applied.

Thanks for the reminder: this patch isn't needed anymore.

I'm closing the bug.

> Best regards,
> Duncan.

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
                   ` (10 preceding siblings ...)
  2021-03-16  1:36 ` Duncan Greatwood
@ 2024-11-18 19:13 ` Alex Hutcheson via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-11-20  9:08   ` Michael Albinus via Bug reports for GNU Emacs, the Swiss army knife of text editors
  11 siblings, 1 reply; 30+ messages in thread
From: Alex Hutcheson via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-11-18 19:13 UTC (permalink / raw)
  To: 45518

[-- Attachment #1: Type: text/plain, Size: 364 bytes --]

It seems like the root cause of this issue (a deadlock due to 2 Emacs
functions waiting on different output from the same socket) was fixed as
part of bug#61350.

Can the tramp-compile-disable-ssh-controlmaster-options workaround now be
removed?

Some of the users in my org have complained about additional SSH
connections being created by compilation functions.

[-- Attachment #2: Type: text/html, Size: 436 bytes --]

^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1
  2024-11-18 19:13 ` Alex Hutcheson via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-11-20  9:08   ` Michael Albinus via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 30+ messages in thread
From: Michael Albinus via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-11-20  9:08 UTC (permalink / raw)
  To: 45518; +Cc: alexhutcheson

Alex Hutcheson via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs@gnu.org> writes:

Hi Alex,

> It seems like the root cause of this issue (a deadlock due to 2 Emacs
> functions waiting on different output from the same socket) was fixed
> as part of bug#61350.
>
> Can the tramp-compile-disable-ssh-controlmaster-options workaround now
> be removed?

Well, we have indeed some code in tramp-accept-process-output, which
should improve the situation.

However, before I remove the workaround, it should be tested whether the
problem described in bug#45518 is fixed indeed. Going through the
discussion, it requires a complex test infrastructure I'm not able to
reproduce ATM (for example, my Ubuntu machine has died. RIP.)

If somebody could remove the workaround from tramp-integration.el, and
test the recipe given there, I would be more confident that we can
remove the workaround finally.

> Some of the users in my org have complained about additional SSH
> connections being created by compilation functions.

As mitigation, they can call after loading compile.el and tramp.el

--8<---------------cut here---------------start------------->8---
(remove-hook 'compilation-mode-hook
             #'tramp-compile-disable-ssh-controlmaster-options)
--8<---------------cut here---------------end--------------->8---

Best regards, Michael.





^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2024-11-20  9:08 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-29  1:10 bug#45518: Ctrl-G Fails to Interrupt Hung Tramp Remote-Compile in Emacs 27.1 Duncan Greatwood
2020-12-30 10:36 ` Michael Albinus
2020-12-30 21:13 ` Duncan Greatwood
2020-12-31  8:42   ` Michael Albinus
2021-01-03 10:27     ` Michael Albinus
2021-01-03 19:27 ` Duncan Greatwood
2021-01-06 13:37   ` Michael Albinus
2021-01-06 22:54 ` Duncan Greatwood
2021-01-11 10:58   ` Michael Albinus
2021-01-11 16:52 ` Duncan Greatwood
2021-01-11 17:56   ` Michael Albinus
2021-01-12  4:34 ` Duncan Greatwood
2021-01-12  9:02   ` Michael Albinus
2021-01-12 15:02   ` Michael Albinus
2021-01-29  5:15 ` Duncan Greatwood
2021-01-29  8:53   ` Michael Albinus
2021-02-10 15:40   ` Michael Albinus
2021-02-11 15:22     ` Michael Albinus
2021-02-14  1:38 ` Duncan Greatwood
2021-02-14 14:15   ` Michael Albinus
2021-02-15 20:21 ` Duncan Greatwood
2021-02-16 20:09   ` Michael Albinus
2021-02-17  5:41 ` Duncan Greatwood
2021-02-17 15:39   ` Michael Albinus
2021-03-16  1:36 ` Duncan Greatwood
2021-03-16 18:30   ` Michael Albinus
2024-11-18 19:13 ` Alex Hutcheson via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-11-20  9:08   ` Michael Albinus via Bug reports for GNU Emacs, the Swiss army knife of text editors
     [not found] <CAN_Aq+rYcM7wHHWXKBqyY4P0Ew04RfkqnQUioqtUk0AOUeaRMA@mail.gmail.com>
2021-02-25 18:33 ` Michael Albinus
2021-03-15 20:49   ` Michael Albinus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).